数组与类使用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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
GD输出汉字的函数的分析
Oct 09 PHP
php 异常处理实现代码
Mar 10 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 PHP
基于PHP常用字符串的总结(待续)
Jun 07 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php异常处理使用示例
Feb 25 PHP
php中spl_autoload详解
Oct 17 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
python实现数组插入新元素的方法
2015/05/22 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Python当中的array数组对象实例详解
2019/06/12 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
python为什么要安装到c盘
2020/07/20 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
城管综合整治方案
2014/05/01 职场文书
财政局长个人总结
2015/03/04 职场文书
工程移交协议书
2016/03/24 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang