Я просто придумал эту небольшую вспомогательную функцию:
function get(&$var, $default=null) {
return isset($var) ? $var : $default;
}
Это не только работает для словарей, но и для всех переменных:
$test = array('foo'=>'bar');
get($test['foo'],'nope'); // bar
get($test['baz'],'nope'); // nope
get($test['spam']['eggs'],'nope'); // nope
get($undefined,'nope'); // nope
Передача ранее неопределенная переменная для ссылки не вызывает ошибку NOTICE
. Вместо этого передача $var
по ссылке определит его и установит в null
. Значение по умолчанию также будет возвращено, если переданная переменная null
. Также обратите внимание на неявно сгенерированный массив в примере spam / eggs:
json_encode($test); // {"foo":"bar","baz":null,"spam":{"eggs":null}}
$undefined===null; // true (got defined by passing it to get)
isset($undefined) // false
get($undefined,'nope'); // nope
Обратите внимание, что хотя $var
передается по ссылке, результатом get($var)
будет копия $var
, не ссылка. Надеюсь, это поможет!