数组与类使用PHP的可变变量名需要的注意的问题


Posted in PHP onJune 20, 2013

有时候可变的变量名会给编程带来很大的方便。也就是说变量名可以被动态的命名和使用。通常变量通过下面这样的语句来命名 :
$a = 'hello';
可变变量名指的是使用一个变量的值作为这个变量的名称。在上面的例子中,通过使用两个$符号,你可以把hello设置成一个变量的名称,就像下面那样。
$$a = 'world';
通过上面的两个语句,有两个变量被定义:变量$a,装的内容是”hello” 以及变量$hello,装的内容是 “world”。 于是,下面的语言:
echo "$a ${$a}";
跟下面的语句的输出完全一致:
echo "$a $hello";
它们都输出:hello world。
但是为了使用数组的可变变量名,你需要解决一个歧义问题。就是,如果你写$$a[1],解析器需要明白究竟你的意思是要把$a[1]当成一个变量,还是要 把$$a当成变量、[1]指的是这个变量的索引。解决这个歧义问题的语法是:第一种情况使用${$a[1]},第二种情况使用${$a}[1]。

类属性也可以通过可变属性名来访问。可变属性名从产生调用所在的变量的访问范围内获取。例如,如果你的表达式是这样的:$foo->$bar,那么运 行时将会在本地变量范围内寻找变量$bar,它的值将会做为$foo对象的一个属性名。如果$bar是个数组也可以使用。

<?php 
class foo { 
    var $bar = 'I am bar.'; 
} 
$foo = new foo(); 
$bar = 'bar'; 
$baz = array('foo', 'bar', 'baz', 'quux'); 
echo $foo->$bar . "\n"; 
echo $foo->$baz[1] . "\n"; 
?>

上面的例子将会输出下面的结果:
I am bar.
I am bar.

请注意:可变变量名不能用于PHP函数和类里的超级全局数组变量上。变量$this也是一个不能动态取名的特殊变量。
PHP 相关文章推荐
同一空间绑定多个域名而实现访问不同页面的PHP代码
Dec 06 PHP
php 无限级缓存的类的扩展
Mar 16 PHP
php 中的4种标记风格介绍
May 10 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
twig模板常用语句实例小结
Feb 04 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
解析使用ThinkPHP应该掌握的调试手段
Jun 20 #PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 #PHP
php Xdebug的安装与使用详解
Jun 20 #PHP
解析phpstorm + xdebug 远程断点调试
Jun 20 #PHP
hadoop中一些常用的命令介绍
Jun 19 #PHP
hadoop常见错误以及处理方法详解
Jun 19 #PHP
php常用Output和ptions/Info函数集介绍
Jun 19 #PHP
You might like
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php调整服务器时间的方法
2015/04/03 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
Python循环语句中else的用法总结
2016/09/11 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
pandas apply多线程实现代码
2020/08/17 Python
金融专业应届生求职信
2013/11/02 职场文书
最受欢迎的自我评价
2013/12/22 职场文书
工地标语大全
2014/06/18 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
甲午风云观后感
2015/06/02 职场文书