変数変数名は、プログラミングに大きな利便性をもたらす場合があります。つまり、変数名に動的に名前を付けて使用することができます。通常、変数には次のようなステートメントで名前が付けられます:
<code><span><?php</span> <span>$</span><span>a</span> = <span>"hello"</span>; <span>?></span> <br></code>
変数変数名とは、変数の値を変数の名前として使用することを指します。上記の例では、以下のように 2 つの $ 記号を使用して、変数の名前に hello を設定できます。
<code><span><?php</span> $<span>$</span><span>a</span> = <span>"world"</span>; <span>?></span> <br></code>
上記の 2 つのステートメントにより、2 つの変数が定義されます。変数 $a には「hello」が含まれ、変数 $hello には「world」が含まれます。 したがって、次の言語:
<code><span><?php</span> <span>echo</span> <span>"$a ${$a}"</span>; <span>?></span> <br></code>
出力は次のステートメントとまったく同じです:
<code><span><?php</span> <span>echo</span> <span>"$a $hello"</span>; <span>?></span> <br></code>
それらはすべて「hello world」と出力します。
配列に変更可能な変数名を使用するには、あいまいさの問題を解決する必要があります。つまり、$$a[1] を記述する場合、パーサーは $a[1] を変数として扱うことを意味するのか、それとも $$a [1] がこの変数を参照することを意味するのかを理解する必要があります。索引。このあいまいさを解決するための構文は、最初のケースでは ${$a[1]} を使用し、2 番目のケースでは ${$a}[1] を使用します。
クラス プロパティには、変更可能なプロパティ名を介してアクセスすることもできます。変更可能なプロパティ名は、呼び出しが行われた変数のアクセス スコープから取得されます。たとえば、式が $foo->$bar のような場合、ランタイムはローカル変数スコープで変数 $bar を検索し、その値が $foo オブジェクトのプロパティ名として使用されます。 $bar が配列の場合にも使用できます。
例1 変数変数名
<code><span><?php</span> <br/> <span>class</span> foo { <br/> <span>var</span> <span>$</span><span>bar</span> = <span>"I am bar."</span>; <br/> } <br/> <span>$</span><span>foo</span> = <span>new</span> foo(); <br/> <span>$</span><span>bar</span> = <span>"bar"</span>; <br/> <span>$</span><span>baz</span> = <span>array</span>(<span>"foo"</span>, <span>"bar"</span>, <span>"baz"</span>, <span>"quux"</span>); <br/> <span>echo</span> <span>$</span><span>foo</span>-><span>$</span><span>bar</span> . <span>" <br>"</span>; <br> <span>echo</span> <span>$</span><span>foo</span>-><span>$</span><span>baz</span>[<span>1</span>] . <span>" <br>"</span>; <br><span>?></span> <br></span></code>
上記の例では、次の結果が出力されます:
私はバーです。
私はバーです。
警告
変数変数名は、PHP 関数およびクラスのスーパー グローバル配列変数には使用できないことに注意してください。変数 $this も、動的に名前を付けることができない特殊な変数です。