PHP の学習 - 変数変数
変数変数名を使用すると非常に便利な場合があります。つまり、変数の変数名を動的に設定して使用することができます。通常の変数は宣言によって設定されます。例:
<?<span style="color: #000000;">php</span><span style="color: #800080;">$a</span> = 'hello'<span style="color: #000000;">;</span>?>
可変変数は、通常の変数の値を可変変数の変数名として取得します。上記の例では、hello に 2 つのドル記号 ($) が使用されており、可変変数として使用できます。例:
<?<span style="color: #000000;">php$</span><span style="color: #800080;">$a</span> = 'world'<span style="color: #000000;">;</span>?>
この時点では、両方の変数が定義されています: $a 内容は "hello" と $hello の内容は「world」です。したがって、次のステートメント:
<?<span style="color: #000000;">php</span><span style="color: #0000ff;">echo</span> "<span style="color: #800080;">$a</span> ${<span style="color: #800080;">$a</span>}"<span style="color: #000000;">;</span>?>
は、次のステートメントとまったく同じ結果を出力します:
<?<span style="color: #000000;">php</span><span style="color: #0000ff;">echo</span> "<span style="color: #800080;">$a</span> <span style="color: #800080;">$hello</span>"<span style="color: #000000;">;</span>?>
どちらも次の結果を出力します。 こんにちは、世界。
配列で可変変数を使用するには、あいまいさを解決する必要があります。これは、$$a[1] を $a[1] として記述するときにパーサーが知っておく必要があることです。変数の場合でも、$$a を変数として使用し、変数内のインデックス [1] の値を取り出します。この問題を解決する構文は、最初のケースでは ${$a[1]} を使用し、2 番目のケースでは ${$a を使用します。 }[ 1]。
クラス プロパティには、可変プロパティ名を通じてアクセスすることもできます。変更可能なプロパティ名は呼び出しのスコープ内で解決されます。たとえば、$foo->$bar 式の場合、$bar はローカル スコープとその値で解析されます。 $foo の属性名に使用されます。 $bar が配列単位の場合も同様です。
中括弧を使用して属性名を明確に区切ることもできます。プロパティが配列内にある場合、プロパティ名に複数の部分が含まれている場合、またはプロパティ名に不正な文字 (json_decode() や SimpleXML など) が含まれている場合に最も役立ちます。
例 #1 変数属性の例
<?<span style="color: #000000;">php</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> foo { </span><span style="color: #0000ff;">var</span> <span style="color: #800080;">$bar</span> = 'I am bar.'<span style="color: #000000;">; </span><span style="color: #0000ff;">var</span> <span style="color: #800080;">$arr</span> = <span style="color: #0000ff;">array</span>('I am A.', 'I am B.', 'I am C.'<span style="color: #000000;">); </span><span style="color: #0000ff;">var</span> <span style="color: #800080;">$r</span> = 'I am r.'<span style="color: #000000;">;}</span><span style="color: #800080;">$foo</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> foo();</span><span style="color: #800080;">$bar</span> = 'bar'<span style="color: #000000;">;</span><span style="color: #800080;">$baz</span> = <span style="color: #0000ff;">array</span>('foo', 'bar', 'baz', 'quux'<span style="color: #000000;">);</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$foo</span>-><span style="color: #800080;">$bar</span> . "\n"<span style="color: #000000;">;</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$foo</span>-><span style="color: #800080;">$baz</span>[1] . "\n"<span style="color: #000000;">;</span><span style="color: #800080;">$start</span> = 'b'<span style="color: #000000;">;</span><span style="color: #800080;">$end</span> = 'ar'<span style="color: #000000;">;</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$foo</span>->{<span style="color: #800080;">$start</span> . <span style="color: #800080;">$end</span>} . "\n"<span style="color: #000000;">;</span><span style="color: #800080;">$arr</span> = 'arr'<span style="color: #000000;">;</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$foo</span>-><span style="color: #800080;">$arr</span>[1] . "\n"<span style="color: #000000;">;</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$foo</span>->{<span style="color: #800080;">$arr</span>}[1] . "\n"<span style="color: #000000;">;</span>?>
上記のルーチンは次のように出力します。 >
I am bar.<span style="color: #000000;">I am bar</span>.<span style="color: #000000;">I am bar</span>.<span style="color: #000000;">I am r</span>.<span style="color: #000000;">I am B</span>.
<?<span style="color: #000000;">php </span><span style="color: #008000;">//</span><span style="color: #008000;">You can even add more Dollar Signs</span> <span style="color: #800080;">$Bar</span> = "a"<span style="color: #000000;">; </span><span style="color: #800080;">$Foo</span> = "Bar"<span style="color: #000000;">; </span><span style="color: #800080;">$World</span> = "Foo"<span style="color: #000000;">; </span><span style="color: #800080;">$Hello</span> = "World"<span style="color: #000000;">; </span><span style="color: #800080;">$a</span> = "Hello"<span style="color: #000000;">; </span><span style="color: #800080;">$a</span>; <span style="color: #008000;">//</span><span style="color: #008000;">Returns Hello</span> $<span style="color: #800080;">$a</span>; <span style="color: #008000;">//</span><span style="color: #008000;">Returns World</span> $$<span style="color: #800080;">$a</span>; <span style="color: #008000;">//</span><span style="color: #008000;">Returns Foo</span> $$$<span style="color: #800080;">$a</span>; <span style="color: #008000;">//</span><span style="color: #008000;">Returns Bar</span> $$$$<span style="color: #800080;">$a</span>; <span style="color: #008000;">//</span><span style="color: #008000;">Returns a</span><span style="color: #000000;"> $$$$$</span><span style="color: #800080;">$a</span>; <span style="color: #008000;">//</span><span style="color: #008000;">Returns Hello</span> $$$$$$<span style="color: #800080;">$a</span>; <span style="color: #008000;">//</span><span style="color: #008000;">Returns World //... and so on ...//</span>?>
<?<span style="color: #000000;">php</span><span style="color: #008000;">//</span><span style="color: #008000;"> Given these variables ...</span><span style="color: #800080;">$nameTypes</span> = <span style="color: #0000ff;">array</span>("first", "last", "company"<span style="color: #000000;">);</span><span style="color: #800080;">$name_first</span> = "John"<span style="color: #000000;">;</span><span style="color: #800080;">$name_last</span> = "Doe"<span style="color: #000000;">;</span><span style="color: #800080;">$name_company</span> = "PHP.net"<span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;"> Then this loop is ...</span><span style="color: #0000ff;">foreach</span>(<span style="color: #800080;">$nameTypes</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$type</span><span style="color: #000000;">) </span><span style="color: #0000ff;">print</span> ${"name_<span style="color: #800080;">$type</span>"} . "\n"<span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;"> ... equivalent to this print statement.</span><span style="color: #0000ff;">print</span> "<span style="color: #800080;">$name_first</span>\n<span style="color: #800080;">$name_last</span>\n<span style="color: #800080;">$name_company</span>\n"<span style="color: #000000;">;</span>?>
<span style="color: #000000;">JohnDoePHP</span>.<span style="color: #000000;">netJohnDoePHP</span>.net