Accenno a una domanda profonda: quando un'espressione può essere vera?
Qui di seguito, vi spiegherò il motivo per cui quello che state facendo non funziona e come risolvere il problema.
In molti linguaggi null
, 0
, e la stringa vuota (""
) tutti valutare false, questo può rendere if
dichiarazioni piuttosto succinta e intuitivo, ma null
, 0
e ""
sono anche tutti i diversi tipi. Come dovrebbero essere confrontati?
This page ci dice che se abbiamo due variabili a confronto, quindi le variabili sono convertiti come segue (in uscita dal tavolo al primo match)
Type of First Type of Second Then
null/string string Convert NULL to "", numerical/lexical comparison
bool/null anything Convert to bool, FALSE < TRUE
Così si sta confrontando un valore nullo rispetto a un numero. Pertanto, sia il numero nullo sia il numero vengono convertiti in booleano. This page ci dice che in tale conversione sia null
sia 0
sono considerati FALSE
.
La tua espressione ora legge, false==false
, che, ovviamente, è vero.
Ma non quello che vuoi.
This page fornisce un elenco di operatori di confronto di PHP.
Example Name Result
$a == $b Equal TRUE if $a equals $b after type juggling.
$a === $b Identical TRUE if $a equals $b, AND they are of the same type.
$a != $b Not equal TRUE if $a not equals $b after type juggling.
$a <> $b Not equal TRUE if $a not equals $b after type juggling.
$a !== $b Not identical TRUE if $a not equals $b, or they are not of the same type.
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b Less than/equal TRUE if $a is less than or equal to $b.
$a >= $b Greater than/equal TRUE if $a is greater than or equal to $b.
Il primo comparatore è il confronto che si sta utilizzando ora. Si noti che esegue le conversioni che ho menzionato prima.
Utilizzando il secondo comparatore risolverà il vostro problema. Poiché un nullo e un numero non sono dello stesso tipo, il confronto ===
restituirà falso, anziché effettuare conversione del tipo come operatore ==
sarebbe.
Spero che questo aiuti.
A meno che $ myVariable è un galleggiante nel qual caso $ myVariable === floatval (0) – AndyClaw