2016-12-23 3 views
0

вот мой пример:php, проверка ключа на переменной NULL устанавливается, как?

$data = null; 

var_dump($data); // returns null 

is($data['test']); 

var_dump($data); // returns array (size=1) 
       //   'test' => null 

function is(&$var, $default = null) 
{ 
    return isset($var) ? $var : $default; 
} 

обратите внимание, что после того, как я бегу is($data['test']), $data становится $data['test'] = null

какие-либо идеи, почему это поведение?

Я ищу, чтобы получить null. Я бегу PHP 7

редактирования: это & символ, просто не знаю, почему бы дать тот результат

+0

Обратите внимание, что это работает, если вы не передадите первый аргумент по ссылке: 'function is ($ var, $ default = null)' –

+0

@FredB да, это так, но иногда я получаю уведомления – Patrioticcow

ответ

0

Вы не можете передать переменную с не существующим ключом к функции (даже со ссылкой), поскольку значение будет передано в функцию.

Если у нас есть $data и в следующей строке, если мы делаем $data['test'], переменная $data будет обновлена ​​до массива.

Так что в вашем случае, когда вы используете is($data['test']);, он обновляет переменную.

Затем он переходит к функции и проверяет isset($var). Он уже установлен, поскольку переменная уже обновлена. Таким образом, isset получает возврат true. Этот возврат будет содержать обновленную переменную, которая равна $data['test'].

Я думаю, что решение от @Fred B будет работать в этом случае.

+0

Я вижу,' $ data ['test '] 'сначала оценивается – Patrioticcow

0

попробовать с помощью array_key_exists() и возвращать нулевое значение, если ключ не найден.

+0

не будет работать. . '$ data' не является массивом – Patrioticcow

0

Это решение, кажется, работает, хотя и менее элегантна:

is($data, 'test'); 

var_dump($data); // returns array (size=1) 
       //   'test' => null 

function is($var, $key, $default = null) 
{ 
    return isset($var[$key]) ? $var[$key] : $default; 
} 
+0

Да, я понимаю, как проверить, существует ли ключ или переменная, существует много способов, мне было интересно, что символ' & 'в частности – Patrioticcow

 Смежные вопросы

  • Нет связанных вопросов^_^