通常變數通過下面這樣的語句來命名 :
複製代碼 代碼如下:<?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是個數組也可以使用。
例1 可變變數名 複製代碼 代碼如下:<?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也是一個不能動態取名的特殊變數。