Gibt es einen Unterschied zwischen diesem ...
if (is_null($var)) {
do_something();
}
und das?
if ($var === null) {
do_something();
}
Welches Formular ist besser, wenn überprüft wird, ob eine Variable null enthält oder nicht? Gibt es Randfälle, die mir bekannt sein sollten? (Ich initialisiere alle meine Variablen, sodass nicht vorhandene Variablen kein Problem darstellen.)
===
Operator wäre schneller, da es sich nicht um eine explizite Funktion handelt ... aber ich war ein- oder zweimal überrascht.Antworten:
Vorausgesetzt, die Variable ist initialisiert (was Sie angegeben haben - obwohl ich nicht 100% sicher bin, ob dies in diesem Zusammenhang von Bedeutung ist oder nicht. Beide Lösungen geben möglicherweise eine Warnung aus, wenn die Variable nicht definiert wurde), sind sie funktional identisch. Ich gehe
===
jedoch davon aus, dass dies geringfügig schneller sein würde, da dadurch der Overhead eines Funktionsaufrufs entfällt.Es hängt wirklich davon ab, wie Sie Ihren Zustand betrachten.
===
ist für einen strengen Datenvergleich. NULL hat nur einen 'Wert', daher funktioniert dies für den Vergleich mit NULL (was eine PHP-Konstante des Nullwerts 'ist').is_null
prüft, ob die Variable vom Datentyp NULL ist.Es liegt wirklich an Ihnen, welche Sie wählen.
quelle
is_null
Variante, weil es einfach ist, versehentlich== null
statt zu verwenden=== null
. Da dies== null
dasselbe ist wieempty
(siehe andere Antwort), führt dies zu einem größeren Fehlerpotential für Programmierer (insbesondere Junior- und Mid-Level-Fehler) als ein einfacher und lesbarer Fehleris_null
.✅
isttrue
❌
istfalse
Zusammenfassung: 🔸 ♦ ️🔸
empty
ist äquivalent zu==null
is_null
ist äquivalent zu===null
isset
ist umgekehrt zuis_null
und===null
quelle
$v
einige generische Variable darzustellen, und dann die anderenisset($v)
,is_null($v)
,$v===null
und so weiterisset
beschwert sich nicht über eine undefinierte Variable, sondern gibt false zurück. Die Verwendung vonis_null
oder=== null
führt zu einem Hinweis.Beide sind genau gleich, ich benutze,
is_null
weil es meinen Code besser lesbar machtquelle
is_null
eigentlich weniger klar. Es mag zwar gut lesen,$v === null
lässt aber keinen Zweifel daran, dass der Vergleich mit strenger Semantik durchgeführt wird, aber mitis_null($v)
werden sich einige Codierer fragen, ob es verwendet wird===
oder==
Semantik.is_null
könnte entfernt oder komplett neu definiert werden, während=== null
immer funktioniert.Wenn es für PHP überflüssig erscheint, so viele Funktionen vom Typ is_foo () zu haben, sollten Sie programmgesteuert aufgerufene Funktionen in Betracht ziehen, wenn Sie nur Standardvergleichsoperatoren verwenden können.
quelle
$arrayWithoutNullValues
würde dann ein Array speichern, das nurnull
Werte hat.Ich habe gerade einen schnellen Benchmark durchgeführt und jeweils eine Million Iterationen getestet.
is_null
dauerte 8 Sekunden;=== null
nahm 1.Ein Anruf bei
is_null
ist also 0,000007 Sekunden langsamer als ein Anruf===
auf meinem Computer.Ich würde etwas Nützlicheres finden, um es zu optimieren.
Mein Code:
quelle
is_null()
ist in meinem Computer unter 7.1.9 Win32 etwas schneller.Ich würde die eingebaute PHP-Funktion jedes Mal über den Operatorvergleich verwenden.
quelle
is_null($var)
ist etwa 14 mal langsamer als$var===null
... 37,8 ms gegenüber 2,6 ms.Aber eigentlich weiß ich nicht warum.
quelle
Eine Sache, die die Leute in dieser Diskussion oft vergessen zu erwähnen, ist, dass Sie, wenn Sie sich ausschließlich mit strenger Typprüfung beschäftigen,
is_null
in Ihren Vergleichsoperatoren niemals einen Tippfehler machen können (== vs ===).quelle