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' を保持しているとしますか?
管理者/スーパーバイザーへの注意:この質問は重複していません。同様の質問を検索してみましたが、知る必要があることに答えたものはありませんでした。