数组与类使用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者的疑难问答(2)
Oct 09 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
PHP高级OOP技术演示
Aug 27 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
php异步多线程swoole用法实例
Nov 14 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
yii2.0框架场景的简单使用示例
Jan 25 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
PHP include任意文件或URL介绍
2014/04/29 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
PHP中的self关键字详解
2019/06/23 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
简介Django中内置的一些中间件
2015/07/24 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
优秀的教师个人的中文求职信
2013/09/21 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python