数组与类使用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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
新手学PHP之数据库操作详解及乱码解决!
Jan 02 PHP
PHP面向对象法则
Feb 23 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
php字符串过滤与替换小结
Jan 26 PHP
PHP邮件群发机实现代码
Feb 16 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 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连接数据库代码应用分析
2011/05/29 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
跟老齐学Python之print详解
2014/09/28 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python Flask基础教程示例代码
2018/02/07 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
国际象棋商店:The Chess Store
2018/07/09 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
制衣厂各岗位职责
2013/12/02 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
党员公开承诺书
2014/03/25 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS