Ho una domanda relativa NULLa PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Perché vedo null quando $aè una stringa vuota? È un bug?
Ho una domanda relativa NULLa PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Perché vedo null quando $aè una stringa vuota? È un bug?
Risposte:
Quello che stai cercando è:
if($variable === NULL) {...}
Nota il ===.
Quando l'uso ==, come hai fatto tu, PHP tratta NULL , falso , 0 , il vuoto stringa e vuoti array come uguali.
== nullcorrispondesse alla stringa vuota e non solo nulla o indefinito.
$a = ''è un vuoto string, falseè un valore booleano, $a = 0;è un numero intero ed nullè di tipo null. Ciò che OP sta dicendo è che PHP li inserirà come "stessi" in valore, ma non come "stessi" nel tipo. Quindi un controllo rigoroso === controllerà anche il tipo e fallirà se ne usi diversi. Questo è il motivo per cui dovresti essere coerente nei valori di ritorno. Se normalmente restituisci una stringa in un metodo come getName(), non dovresti ottenere nullquando è vuota, ma più probabilmente una stringa emtpy $user->getName() === ''o $user->getId() === 0o $user->isActive === false. Comportamento previsto!
Come mostrato nella tabella seguente, empty($foo)è equivalente $foo==nulle is_null($foo)ha la stessa funzione di $foo===null. La tabella mostra anche alcuni valori complicati relativi al nullconfronto. (ϕ indica una variabile non inizializzata.)
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
Non uso mai empty()e is_null()funzioni. L'uso del confronto semplice è meno ambiguo, più rapido e più pulito. In particolare ci saranno meno parentesi graffe da abbinare.
ad es. if($x==null || $y==null)vsif(is_null($x) || is_null($y))
==nulland ===null.
controllare ==vs===
'' == NULLrestituire vero
0 == NULLrestituire vero
false == nullrestituire vero
mentre
'' === NULLrestituire false
0 === NULLrestituire false
false === NULLrestituire false
No, non è un bug. Dai un'occhiata ai confronti allentati con == tabella (seconda tabella), che mostra il risultato del confronto di ciascun valore nella prima colonna con i valori nelle altre colonne:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Ci si può vedere che una stringa vuota ""confronto con false, 0, NULLo ""produrrà vero.
È possibile che si desideri utilizzare is_null [documenti] o un confronto rigoroso (terza tabella).
0quando viene lanciata in una stringa: codepad.org/qi40SG3E . Così (int)"php" == 0.
Questo non è un bug ma un comportamento normale di PHP. Succede perché l' ==operatore in PHP non controlla il tipo.
'' == null == 0 == false
Se vuoi anche verificare se i valori hanno lo stesso tipo, usa ===invece. Per approfondire questa differenza, leggi la documentazione ufficiale .
Se lo usi ==, php considera una stringa o un array vuoti come null. Per fare la distinzione tra nulle empty, utilizzare ===o is_null. Così:
if($a === NULL) o if(is_null($a))
Usa empty- http://php.net/manual/en/function.empty.php .
Esempio:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable. In realtà quello che vuoi è:$variable == null(nota==)