動的連想配列値ルックアップ関数 (クラス内) を構築しようとしています:
class Family
{
public static $members = array(
'one' => array(
'child' => 0,
'children' => 5
),
'two' => array(
'child' => 2,
'children' => null
)
);
public static function resolveMemberValue()
{
$chain = func_get_args();
$lookup = 'members' . '[\'' . implode('\'][\'', $chain) . '\']';
var_dump( $lookup );
return static::$$lookup;
}
}
Family::resolveMemberValue('one', 'child');
しかし、これは次の結果になります。
string(23) "members['one']['child']"
致命的なエラー: 宣言されていない静的プロパティへのアクセス: Family::$members['one']['child'] /family.php 行 23
PHP致命的なエラー: 宣言されていない静的プロパティへのアクセス: Family::$members['one']['child'] /family.php の 23 行目
ただし、ダンプされた値をコピーし、スクリプト内に貼り付けてドル記号を追加すると、期待どおりの結果が返されます。
var_dump( Family::$members['one']['child'] );
int(0)
これが必要な理由は、複数の変数で使用され、ジェネレーター関数から呼び出されるためです。
スニペットの何が問題になっていますか?