Aquí está mi ejemplo:

$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;
}

Observe que después de ejecutar is($data['test']), $data se convierte en $data['test'] = null

Alguna idea de por qué este comportamiento?

Estoy buscando obtener null. Estoy corriendo php 7

Editar: es el símbolo &, pero no estoy seguro de por qué daría ese resultado

0
Patrioticcow 23 dic. 2016 a las 09:08

3 respuestas

La mejor respuesta

No puede pasar una variable con una clave no existente a una función (incluso con referencia) ya que el valor se pasará a la función.

Si tenemos $data y en la siguiente línea si tenemos $data['test'], la variable $data se actualizará a una matriz.

Entonces, en su caso, cuando usa is($data['test']);, actualiza la variable.

Luego va a la función y verifica isset($var). Ya está configurado ya que la variable ya está actualizada. Entonces el isset obtiene un retorno true. Ese retorno contendrá la variable actualizada que es $data['test'].

Creo que la solución de @Fred B funcionará en este caso.

0
masterFly 23 dic. 2016 a las 07:17

Esta solución parece funcionar, aunque menos elegante:

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
Fred B 23 dic. 2016 a las 06:40

Intente usar array_key_exists () y devuelva nulo si no se encuentra la clave.

0
Hadi Susanto 23 dic. 2016 a las 06:21