数组与类使用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和XSL stylesheets转换XML文档
Oct 09 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
php实现的CSS更新类实例
Sep 22 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
Windows7下的php环境配置教程
Feb 28 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
PHP+MySql实现一个简单的留言板
Jul 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
2006/12/14 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
use jscript List Installed Software
2007/06/11 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
Textarea输入字数限制实例(兼容iOS&amp;安卓)
2017/07/06 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
python开发简易版在线音乐播放器
2017/03/03 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
Python中dict和set的用法讲解
2019/03/28 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
销售高级职员求职信
2013/10/29 职场文书
高级人员简历的自我评价分享
2013/11/03 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
消防安全宣传标语
2014/06/07 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
Pandas数据结构之Series的使用
2022/03/31 Python