2012-01-31 10 views
13

Pisałem mój „Jeśli ta zmienna nie jest pusta” wypowiedzi tak:Najlepszą praktyką not null if

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

Ale mam pytanie, czy to jest prawidłowe, to nie ma spowodował problem dla mnie. Oto odpowiedź, którą znalazłem online:

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

To faktycznie wygląda na dłuższe niż moje podejście, ale czy jest lepsze? Jeśli tak, dlaczego?

+4

[is_null] (http://php.net/manual/en/function.is-null.php) może być użyteczny dla. –

+1

'if (pusty ($ var))' lub 'if (is_null ($ var))' wydaje się być dla mnie lepszy –

+0

Zgadzam się z kingdm. 'empty()' sprawdza wartości puste lub puste. – James

Odpowiedz

26

Zamiast:

if (!($error == NULL)) 

Wystarczy zrobić:

if ($error) 

Można by pomyśleć, że pierwszy jest bardziej oczywiste, ale to faktycznie bardziej mylące. Oto dlaczego:

$error = null; 

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

To działa zgodnie z oczekiwaniami. Jednak kolejne pięć wartości będą mieć takie same i (dla wielu, nieoczekiwanego zachowania):

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

Drugi tryb warunkowy if ($error) czyni go bardziej jasne, że typu odlew jest zaangażowana.

Jeśli programista chce wymagać, że wartość faktycznie być NULL, powinien być stosowany ściśle porównania, tzn if ($error !== NULL)

+0

Bardzo fajne. Dziękuję Ci! –

+0

Należy zauważyć, że można uzyskać błędy z metodą if ($ error), jeśli zmienna, którą próbujesz sprawdzić, nie istnieje i dlatego jest pusta. –

0

Dlaczego po prostu nie

if (!$var) 

+0

Zmienna może istnieć chociaż –

+2

, więc co? twoje pytania nie określały, że – dynamic

+0

nie będzie działać dla 'int', gdy wartość wynosi 0.' if (0) 'zwróci false. –

0

Istnieją sposoby:

<?php 

error_reporting(E_ALL); 

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

?> 

innego:

<?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."; 
} 
?> 

Aby sprawdzić, czy jest ona pusta:

<?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

Dobrze jest wiedzieć dokładnie to, co jest w zmiennej, zwłaszcza jeśli sprawdzanie niezainicjowany vs vs null lub na prawdziwe lub fałszywe vs pusty lub 0.

Dlatego, jak wspomniano przez webbiedave, czy sprawdzanie wartości null, należy użyć

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

jeśli sprawdzanie initilized, jak shibly SA id

isset($var) 

jeśli sprawdzenie prawdziwej lub fałszywej lub 0 lub pusty ciąg

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

I tylko wykorzystać puste dla „” s oraz null ponieważ funkcje łańcuchowe wydają się być niespójne.Jeśli sprawdzanie pustym

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 

jeśli semantycznie niezainicjowany jest taka sama jak jedna z powyższych wartości, a następnie zainicjować zmienną na początku tej wartości.

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

if ($var === '') blah blah. 
Powiązane problemy