可変変数名を持つことができると便利な場合があります。つまり、動的に設定して使用できる変数名です。通常の変数は、次のようなステートメントで設定されます。
<?php
$a = 'hello';
?>
可変変数は、変数の値を取り、それを変数の名前として扱います。上記の例では、2 つのドル記号を使用することで変数の名前として hello を使用できます。すなわち
<?php
$$a = 'world';
?>
この時点で、2 つの変数が定義され、PHP シンボル ツリーに格納されています。内容が「hello」の $a と、内容が「world」の $hello です。したがって、このステートメント:
<?php
echo "$a ${$a}";
?>
以下とまったく同じ出力を生成します。
<?php
echo "$a $hello";
?>
つまり、どちらも hello world を生成します。
可変変数を配列で使用するには、あいまいさの問題を解決する必要があります。つまり、$$a[1] と記述した場合、パーサーは、$a[1] を変数として使用するつもりだったのか、それとも変数として $$a を使用してから [1] インデックスを使用したかったのかを認識する必要があります。その変数。このあいまいさを解決するための構文は、最初のケースでは ${$a[1]}、2 番目のケースでは ${$a}[1] です。
クラス プロパティには、変数プロパティ名を使用してアクセスすることもできます。変数のプロパティ名は、呼び出し元のスコープ内で解決されます。たとえば、$foo->$bar などの式がある場合、ローカル スコープで $bar が検査され、その値が $foo のプロパティの名前として使用されます。これは、$bar が配列アクセスの場合にも当てはまります。