2012-03-12 15 views
40

W PHP, jaka jest różnica między is_null i ==null w PHP? Jakie są kwalifikacje, aby obie wersje zwracały wartość true?PHP is_null() i == null

+1

To nie jest duplikat - inne pytanie dotyczy "===", a nie "==" – derekdreery

Odpowiedz

54

is_null jest taka sama jak === null. Oba zwracają wartość true, gdy zmienna ma wartość null (lub unset).

Pamiętaj, że używam ===, a nie ==. === porównuje typ i wartość.

+0

Jeśli zmienna nie jest ustawiona, 'is_null()' zwraca ' true' ale również zgłasza błąd "notice: undefined variable". Aby tego uniknąć, możesz zrobić '! Isset ($ var)', co jest równoważne, jedyną wadą jest to, że możesz przekazać tylko zmienne do 'isset()'. –

+0

@Rocket, Kiedy mówisz "jest taki sam", masz na myśli ** identyczne ** również pod względem błędów i ostrzeżeń, które będą generować? – Pacerier

+0

@Pacerier: Tak! Zobacz ten przykład: https://eval.in/297496 –

2

== nie sprawdza typu, więc jakoś, gdzieś, coś jak ciąg '' lub ciąg 'null' może pojawić się jako równy zeru.

Użyj potrójnego znaku równości, ===, aby nie tylko sprawdzić dwie wartości są równe, ale także, że są tego samego typu.

52

Więc można lepiej zrozumieć:

$a = null; 
$b = 0; 

is_null($a) // TRUE 
$a == null // TRUE 
$a === null // TRUE 
is_null($b) // FALSE 
$b == null // TRUE 
$b === null // FALSE 
+3

Świetny przykład! +1 –

5

Można sprawdzić porównanie między is_null() i zerowy === $ var

Good comparison between two

+0

FYI, dla jasności, jest to wykres porównujący WYDAJNOŚĆ; Podążyłem za linkiem, żeby zobaczyć, czy jest jakaś subtelna sytuacja, w której są SEMANTYCZNIE różne, ale nie o to chodzi. – ToolmakerSteve

4

===null zaleca autor: Rasmus Lerdorf, wynalazca PHP. Rasmus twierdzi, że test zerowy jest szybszy niż test isset. Jego zalecenie jest wystarczającym powodem, aby poważnie spojrzeć na różnicę. Różnica byłaby znacząca, gdybyś miał małą pętlę przechodzącą przez ten sam kod tysiące razy w jednym żądaniu strony internetowej.

+4

Kiedy mówisz, że ktoś mówi coś, link lub [potrzebne źródło] (http://xkcd.com/285). – Pacerier

+0

FWIW, to nie jest to, o co pyta OP. 'isset' ma inne znaczenie. – ToolmakerSteve

+0

@ Tematowy szablon o zwróconej wartości został bardzo dobrze opisany w najlepszej odpowiedzi (znaczniku). To jest dodatek do różnic w prędkości –

Powiązane problemy