数组与类使用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 相关文章推荐
xajax写的留言本
Nov 25 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
关于crontab的使用详解
Jun 24 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
PHP类的反射用法实例
Nov 03 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
js评分组件使用详解
2017/06/06 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
高分子材料与工程专业推荐信
2013/12/01 职场文书
初中化学教学反思
2014/01/23 职场文书
爱我中华教学反思
2014/04/28 职场文书
自主招生专家推荐信
2015/03/26 职场文书
停水通知
2015/04/16 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS