多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 可变变量 有时候使用可变变量是很方便的。就是说,一个变量的变量名是可以动态的设置和使用。一个普通的变量 通过声明来设置,例如: ``` <?php $a = 'hello'; ?> ``` 一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中hello使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如: ``` <?php $$a = 'world'; ?> ``` 这时,两个变量都被定义了:$a的内容是“hello”并且$hello的内容是'world'。因此,以下语句: ``` <?php echo "$a ${$a}"; ?> ``` 与以下语句输出完全相同的结果: ``` <?php echo "$a $hello"; ?> ``` 它们都会输出:hello world。 要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下$$a[1]时,解析器需要知道是想要$a[1]作为一个变量呢,还是想要$$a作为一个变量并取出该变量中索引为[1]的值。解决此问题的语法是,对第一种情况用${$a[1]},对第二种情况用${$a}[1]。 类的属性也可以通过可变属性名来访问。可变属性名将在该调用所处的范围内被解析。例如,对于$foo->$bar表达式,则会在本地范围来解析$bar并且其值将被用于$foo的属性名。对于$bar是数组单元时也是一样。 也可也使用花括号来给属性名清晰定界。。最有用是在属性位于数组中,或者属性名包含有多个部分或者属性名包含有非法字符时(例如来自 [json\_decode()](http://php.net/manual/zh/function.json-decode.php) 或 [SimpleXML](http://php.net/manual/zh/book.simplexml.php))。 **Example #1可变属性示例** ``` <?php class foo {     var $bar = 'I am bar.';     var $arr = array('I am A.', 'I am B.', 'I am C.');     var $r   = 'I am r.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo $foo->$bar . "\n"; echo $foo->$baz[1] . "\n"; $start = 'b'; $end   = 'ar'; echo $foo->{$start . $end} . "\n"; $arr = 'arr'; echo $foo->$arr[1] . "\n"; echo $foo->{$arr}[1] . "\n"; ?> ``` 以上例程会输出: I am bar. I am bar. I am bar. I am r. I am B. > **Warning** > 注意,在 PHP 的函数和类的方法中,[超全局变量](http://php.net/manual/zh/language.variables.superglobals.php)不能用作可变变量。*$this* 变量也是一个特殊变量,不能被动态引用。