## 可变变量
有时候使用可变变量是很方便的。就是说,一个变量的变量名是可以动态的设置和使用。一个普通的变量 通过声明来设置,例如:
```
<?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* 变量也是一个特殊变量,不能被动态引用。
- 序言
- 简介
- PHP是什么?
- PHP能做什么?
- 基本语法
- 类型
- boolean(布尔型)
- integer(整型)
- float(浮点型)
- string(字符串)
- array(数组)
- object(对象)
- callable(可调用)
- resource(资源)
- NULL(无类型)
- 伪类型
- 类型转换的判别
- 变量
- 基础
- 预定义变量
- 变量范围
- 可变变量
- 来自PHP之外的变量
- 常量
- 语法
- 魔术常量
- 表达式
- 运算符
- 运算符优先级
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 错误控制运算符
- 执行运算符
- 递增/递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
- 流程控制
- if
- else
- elseif/else if
- 流程控制的替代语法
- while
- do-whille
- for
- foreach
- break
- continue
- switch
- declare
- return
- require
- include
- require_once
- include_once
- goto
- 函数
- 用户自定义函数
- 函数的参数
- 返回值
- 可变函数
- 内部 (内置)函数
- 匿名函数
- 类与对象
- 简介
- 基本概念
- 属性
- 类的自动加载
- 构造函数
- 访问控制(可见性)