PHP 支持可變變量名,即變量名可動態設置和使用。這在某些場景下極大提升編程靈活性。
普通變量賦值:
<?php
$a = 'hello';
?>
使用雙美元符號 $$a 將 $a 的值作為新變量名:
<?php
$$a = 'world';
?>
此時定義了兩個變量:$a 值為 "hello",$hello 值為 "world"。以下兩句輸出相同:
<?php
echo "$a ${$a}"; // hello world
echo "$a $hello"; // hello world
?>
$$a[1] 存在歧義:是 $a[1] 作為變量名,還是 $$a 作為變量、[1] 為索引?解決語法:
${$a[1]}:$a[1] 為變量名${$a}[1]:$$a 為變量,取索引 1可變屬性名從調用作用域的局部變量獲取值:
<?php
class Foo {
var $bar = 'I am bar.';
}
$foo = new Foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n"; // I am bar.
echo $foo->$baz[1] . "\n"; // I am bar.
?>
$foo->$bar 會在局部作用域尋找 $bar,其值 "bar" 作為屬性名訪問。數組元素同理。
$_GET、$_POST 等)$this 是特殊變量,不可動態命名合理使用可變變量名可簡化動態屬性/變量訪問,但濫用會降低代碼可讀性,建議僅在必要場景(如動態表單處理、配置映射)使用。