PHP的可变变量名的使用方法分享


Posted in PHP onFebruary 05, 2012

通常变量通过下面这样的语句来命名 :

<?php 
$a = 'hello'; 
?>

可变变量名指的是使用一个变量的值作为这个变量的名称。在上面的例子中,通过使用两个$符号,你可以把hello设置成一个变量的名称,就像下面那样。
<?php 
$$a = 'world'; 
?>

通过上面的两个语句,有两个变量被定义:变量$a,装的内容是”hello” 以及变量$hello,装的内容是 “world”。 于是,下面的语言:
<?php 
echo "$a ${$a}"; 
?>

跟下面的语句的输出完全一致:
<?php 
echo "$a $hello"; 
?>

它们都输出:hello world。
为了使用数组的可变变量名,你需要解决一个歧义问题。就是,如果你写$$a[1],解析器需要明白究竟你的意思是要把$a[1]当成一个变量,还是要把$$a当成变量、[1]指的是这个变量的索引。解决这个歧义问题的语法是:第一种情况使用${$a[1]},第二种情况使用${$a}[1]。
类属性也可以通过可变属性名来访问。可变属性名从产生调用所在的变量的访问范围内获取。例如,如果你的表达式是这样的:$foo->$bar,那么运行时将会在本地变量范围内寻找变量$bar,它的值将会做为$foo对象的一个属性名。如果$bar是个数组也可以使用。
例1 可变变量名
<?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 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
php数组总结篇(一)
Sep 30 PHP
PHP 处理图片的类实现代码
Oct 23 PHP
PHP中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
PHP receiveMail实现收邮件功能
Apr 25 PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 PHP
PHP数组与字符串互相转换实例
May 05 PHP
PHP中如何判断AJAX提交的数据
Feb 05 #PHP
用PHP书写安全的脚本代码
Feb 05 #PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 #PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 #PHP
PHP使用数组实现队列
Feb 05 #PHP
mysql数据库差异比较的PHP代码
Feb 05 #PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 #PHP
You might like
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
js表格分页实现代码
2009/09/18 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Python 异常处理实例详解
2014/03/12 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
Python中dict和set的用法讲解
2019/03/28 Python
用python读取xlsx文件
2020/12/17 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
施工安全保证书
2015/05/09 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL