有时候使用可变变数名是很方便的。就是说,一个变数的变数名可以动态的设定和使用。一个普通的变数通过宣告来设定,例如:
一个可变变数获取了一个普通变数的值作为这个可变变数的变数名。在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变数的变数了。例如:
这时,两个变数都被定义了:$a 的内容是 “hello” 并且 $hello 的内容是 “world” 。因此,以下语句:
与以下语句输出完全相同的结果:
它们都会输出:hello world 。
要将可变变数用于阵列,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变数呢,还是想要 $$a 作为一个变数并取出该变数中索引为 [1] 的值。
解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1] 。
类的属性也可以通过可变属性名来访问。可变属性名将在该呼叫所处的范围内被解析。例如,对于 $foo->$bar 表示式,
则会在本地范围来解析 $bar 并且其值将被用于 $foo 的属性名。
对于 $bar 是阵列单元时也是一样。