このコードがあるとします(簡略化された例):
$propertyName = 'items';
$foo = new \stdClass;
$foo->$propertyName = array(42);
この時点で、配列内の値への参照を評価する式を記述したいと思います。
これを行うことは可能ですか?もしそうなら、どのように?
「仕事をする」が、私が探しているものではない答えはこれです:
// Not acceptable: two statements
$temp = &$foo->$propertyName;
$temp = &$temp[0];
しかし、なぜそれを2つのステートメントとして書くのでしょうか。まあ、これはうまくいかないので:
// Will not work: PHP's fantastic grammar strikes again
// This is actually equivalent to $temp = &$foo->i
$temp = &$foo->$propertyName[0];
もちろん&$foo->items[0]
、プロパティ名を修正するため、別の受け入れられない解決策です。
誰かが奇妙な要件について疑問に思っている場合:私はループ内でこれを行っています。ループ内では、$foo
それ自体がグラフ内のノードへの参照です。次の反復で設定してもグラフが完全に台無しにならないように、関連するソリューションには後で$temp
必要になります。参照に細心の注意を払わないと、この要件を見落とす可能性があるため、バグを引き起こす可能性が少なくなるようにこのコードを記述する方法があるかどうか疑問に思いました。unset($temp)
$temp
unset