数组与类使用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 购物车实例(申精)
May 11 PHP
php split汉字
Jun 05 PHP
PHP 代码规范小结
Mar 08 PHP
php中防止恶意刷新页面的代码小结
Oct 31 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
php实时倒计时功能实现方法详解
Feb 27 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
php将html转为图片的实现方法
May 19 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 Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
python获取本机所有IP地址的方法
2018/12/26 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
捐赠仪式主持词
2014/03/19 职场文书
司法建议书范文
2014/05/13 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
班级班风口号大全
2015/12/25 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL