3

PHPの可変変数の概念を理解しています。PHP の可変変数に関する私の理解によれば、次のコードは次のとおりです。

$foo = 'hello';
$$foo = 'world';

echo $foo . ' ' . $hello;

出力は次のように生成されます。

Hello World

しかし、変数オブジェクトのプロパティのケースを理解するのは難しいと思います

次のように、単一のプロパティを持つ foo というクラスがあるとします。

class foo {    
    var $r   = 'I am r.';
}

ここで、クラス foo のインスタンスを作成し、可変変数の概念を使用して次のコードを作成します。

$foo = new foo();

$bar = 'r';
echo $foo->$bar;

出力します:

I am r.

すべてがうまくいくまでは、配列値を持つプロパティを含めると、めちゃくちゃになります。たとえば、配列値を持つ別のプロパティをクラス fooに追加すると、クラスは次のようになります。

class foo {    
    var $arr = array('I am A.', 'I am B.', 'I am C.');
    var $r   = 'I am r.';
}

ここで、クラス fooのインスタンスを作成し、次のようにプロパティ$arr[1]を読み取ろうとすると:

$arr = 'arr';
echo $foo->$arr[1];

どの出力:

I am r.

出力は私には奇妙に見えます。$foo->$arr[1]は、クラス foo のプロパティ $r にどのように解決されるのでしょうか?

$foo->$arr を $foo-> arr [1] に解決してはいけません (: ドル記号はありません)。出力は次のようになります。

I am B.

これはどのように起こりますか?

$foor{$arr}[1]を実行すると「I am B.」が出力されることは承知しています。

私の質問は、なぜ $foo->$arr が $foo->arr に解決されないのですか? 変数 $arr が値 'arr' を保持しているとしますか?

管理者/スーパーバイザーへの注意:この質問は重複していません。同様の質問を検索してみましたが、知る必要があることに答えたものはありませんでした。

4

1 に答える 1