Я только что придумал эту маленькую вспомогательную функцию:
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
. Также обратите внимание на неявно созданный массив в примере со спамом и яйцами:
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
, а не ссылка. Надеюсь, это поможет!