数组与类使用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实现文件上传二法
Oct 09 PHP
虚拟主机中对PHP的特殊设置
Oct 09 PHP
php mysql数据库操作类
Jun 04 PHP
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
一篇有意思的技术文章php介绍篇
Oct 26 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
DIY实用性框形天线
2021/03/02 无线电
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
input的focus方法使用
2010/03/13 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
javascript操作css属性
2013/12/30 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Django数据库表反向生成实例解析
2018/02/06 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Python遍历numpy数组的实例
2018/04/04 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
Python如何实现定时器功能
2020/05/28 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
法学毕业生自荐信
2013/11/13 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
运动会入场解说词
2014/02/07 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏