2012-01-31 20 views
13

He estado escribiendo mi "Si esta variable no está vacío" declaraciones de este modo:La mejor práctica para no nulo si las declaraciones

if ($var != '') { 
// Yup 
} 

Pero le he pedido si esto es correcto, no tiene me causó un problema. Aquí está la respuesta que encontré en línea:

if (!($error == NULL)) { 
/// Yup 
} 

Esto en realidad parece más largo que mi enfoque, pero ¿es mejor? Si es así, ¿por qué?

+4

[is_null] (http://php.net/manual/en/function.is-null.php) puede ser bueno usarlo. –

+1

'if (empty ($ var))' or 'if (is_null ($ var))' parece ser mejor para mí –

+0

Estoy de acuerdo con kingdm. 'empty()' busca valores nulos o vacíos. – James

Respuesta

26

En lugar de:

if (!($error == NULL)) 

Basta con hacer:

if ($error) 

Uno podría pensar que el primero es más clara, pero en realidad es más engañosa. He aquí por qué:

$error = null; 

if (!($error == NULL)) { 
    echo 'not null'; 
} 

Esto funciona como se esperaba. Sin embargo, los próximos cinco valores tendrán la misma y (para muchos, inesperado) comportamiento:

$error = 0; 
$error = array(); 
$error = false; 
$error = ''; 
$error = 0.0; 

El segundo condicional if ($error) hace que sea más claro que la conversión de tipos está involucrado.

Si el programador quería exigir que el valor realmente sea NULL, debería haber utilizado una comparación estricta, es decir, if ($error !== NULL)

+0

Muy bueno. ¡Gracias! –

+0

Tenga en cuenta que puede recibir errores con el enfoque if ($ error), si la variable que está intentando verificar no existe y, por lo tanto, es nula. –

0

Por qué simplemente no

if (!$var) 

+0

La variable puede existir aunque –

+2

¿y qué? sus preguntas no especificaron que – dynamic

+0

no funcionará para 'int' cuando el valor es 0. Un' if (0) 'devolverá falso. –

0

hay maneras:

<?php 

error_reporting(E_ALL); 

$foo = NULL; 
var_dump(is_null($inexistent), is_null($foo)); 

?> 

Otra:

<?php 

$var = ''; 

// This will evaluate to TRUE so the text will be printed. 
if (isset($var)) { 
    echo "This var is set so I will print."; 
} 
?> 

Para comprobar si está vacío:

<?php 
$var = 0; 

// Evaluates to true because $var is empty 
if (empty($var)) { 
    echo '$var is either 0, empty, or not set at all'; 
} 

// Evaluates as true because $var is set 
if (isset($var)) { 
    echo '$var is set even though it is empty'; 
} 
?> 
1

Es bueno saber exactamente lo que está en su variable, especialmente si usted está mirando para sin inicializar vs nulo o na vs verdadero o falso vs vacío o 0.

por lo tanto, como se ha mencionado por webbiedave, si la comprobación de null, utilizar

$error !== null 
$error === null 
is_null($error) 

si la comprobación de initilized, como sa Shibly Identificación del

isset($var) 

si la comprobación de cadena de verdadero o falso, o 0, o vacío

$var === true 
$var === 0 
$var === "" 

Yo sólo uso vacío para '' s y nulos ya que las funciones de cadena tienden a ser incompatibles.Si la comprobación de vacío

empty($var) 
$var // in a boolean context 

// This does the same as above, but is less clear because you are 
// casting to false, which has the same values has empty, but perhaps 
// may not one day. It is also easier to search for bugs where you 
// meant to use === 
$var == false 

Si semánticamente no inicializada es el mismo que uno de los valores anteriores, entonces inicializar la variable al principio a ese valor.

$var = '' 
... //some code 

if ($var === '') blah blah. 
Cuestiones relacionadas