数组与类使用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输出表格的实现代码(修正版)
Dec 29 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
php数组去重实例及分析
Nov 26 PHP
PHP的魔术常量__METHOD__简介
Jul 08 PHP
PHP写日志的实现方法
Nov 05 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
php图片的二进制转换实现方法
Dec 15 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
webpack打包node.js后端项目的方法
2018/03/10 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
C语言面试题
2015/10/30 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
自我评价中英文语句
2013/11/30 职场文书
大学军训自我鉴定
2013/12/15 职场文书
关于赌博的检讨书
2014/01/24 职场文书
学术会议主持词
2014/03/17 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
教师节晚会主持词
2015/06/30 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库