以下は、配列メンバーも解決する変数名構文に従った例です。
// String that has a value similar to an array key
$string = 'welcome["hello"]';
// initialize variable function (here on global variables store)
$vars = $varFunc($GLOBALS);
// alias variable specified by $string
$var = &$vars($string);
// set the variable
$var = 'World';
// show the variable
var_dump($welcome["hello"]); # string(5) "World"
次の実装では:
/**
* @return closure
*/
$varFunc = function (array &$store) {
return function &($name) use (&$store)
{
$keys = preg_split('~("])?(\\["|$)~', $name, -1, PREG_SPLIT_NO_EMPTY);
$var = &$store;
foreach($keys as $key)
{
if (!is_array($var) || !array_key_exists($key, $var)) {
$var[$key] = NULL;
}
$var = &$var[$key];
}
return $var;
};
};
PHPで変数をオーバーロードできないため、ここではPHPの表現力に制限されます。つまり、関数の戻り値としての変数参照の書き込みコンテキストがなく、追加のエイリアシングが必要になります。
$var = &$vars($string);
このようなものがニーズに合わない場合は、PHPにパッチを適用する必要があります。オプションでない場合、PHPは探している言語機能を提供していません。
関連する質問も参照してください。文字列を使用して(潜在的に大きい)多次元配列にアクセスします。