数组与类使用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 相关文章推荐
如何使用脚本模仿登陆过程
Nov 22 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
php多文件上传实现代码
Feb 20 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
Windows下php+mysql5.7配置教程
May 16 PHP
php实现的双色球算法示例
Jun 20 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
Laravel中10个有用的用法小结
May 06 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
PHP与Web页面的交互示例详解二
Aug 04 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文件下载类
2006/12/06 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
Python中几个比较常见的名词解释
2015/07/04 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
一道python走迷宫算法题
2018/01/22 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
自动化系在校本科生求职信
2013/10/23 职场文书
小学少先队活动总结
2015/05/08 职场文书
小学教师读书笔记
2015/07/01 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书