2012-06-01 14 views
8

To jest pytanie, które jest podsłuch mnie przez długi czas i nie mogę znaleźć żadnej odpowiedzi ... zauważył używany sporo przez Zend Framework DeweloperówPHP - odwrócona kolejność if

Co jest różnica między następującymi instrukcjami 2 "jeśli"? :

if (null === $this->user) { ... } 

if ($this->user === null) { ... } 

Dla mnie pierwsza wygląda trochę dziwne;]

Dzięki za odpowiedź.

Odpowiedz

13

Nie jest to różnica na drodze skrypcie działa, to po prostu standardowe kodowanie, zalecenie

powodem, zaleca się, aby używać go w ten sposób:

if (null == $this->user) 

jest fakt, że jeśli błędnie i napisać = zamiast == dostaniesz błąd, podczas gdy

($this->user = null) 

zamiast

($this->user == null) 

prac, ale powoduje dziwne błędy (przyporządkowanie a ostateczna wartość jest oceniana jako bool zamiast porównania)

i myślę, że to po prostu przedłużony jako przyzwyczajenia do ścisłego operator porównania (===)

Aktualizacja: ponieważ widzę, że nadal istnieje pewne działanie w tym wątku, nawet 3 lata po opublikowaniu odpowiedzi d Dodałbym coś, o czym zapomniałem wspomnieć. Ten typ notacji znany jest pod nazwą yoda conditions, można na przykład przeczytać więcej na ten temat na stronie this wikipedia page.

+1

Dzięki! Martwe proste, ale nie mogłem znaleźć odpowiedzi ... – alchemication

+0

@alchemication Cieszę się, że pomaga, to było miłe pytanie +1 – mishu

+0

również brzmi jak naprawdę dobry powód, aby użyć 'is_null ($ var)' lub '! Is_null ($ var) 'gdy tylko jest to możliwe i praktyczne. Usuwa zgadywankę. – RockyFord

1

Przy porównywaniu wartości nie ma różnicy w kolejności.

Może być łatwiej dla kogoś, kto odczyta lub napisze taki kod, ale dla mnie jest to to samo, co pisanie od prawej do lewej.

1

Taka kolejność elementów w porównaniu, jak sądzę, ma zapobiegać przypadkowemu przypisaniu w instrukcjach if.

1

Są to tak zwane warunki yoda.

Chodzi o to, że jeśli umieścisz wartość jako pierwszą (np. False, null, true lub cokolwiek krótko), łatwiej będzie zeskanować instrukcję i szybko zrozumieć intencję stanu.

Ponadto, co mishu powiedział :)

1

Jeśli przypadkowo napisać:

if (null = $this->user) { ... } 

dostaniesz błąd składni.

Jeśli przypadkowo napisać:

if ($this->user = null) { ... } 

będzie szukając powodu dziwnego zachowania aplikacji przez długi czas.

+0

OK, wielkie dzięki. Dokładnie tego szukałem! – alchemication

4

Jest to dobra praktyka przy pisaniu oświadczenia if. Rozważmy następujący kod:

if (10 == $var) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

Jeśli zapomniałeś jeden znak równości:

if (10 = $var) { } 

Następnie PHP wygeneruje błąd składniowy, więc wiesz, że brakowało jednego = i można go naprawić. Ale ten kod:

if ($var = 10) { } 

przydzieli 10 do $var i zawsze ocenia do prawdziwego stanu. Niezależnie od zawartości $var powyższy kod zawsze będzie brzmiał "prawda" i bardzo trudno będzie znaleźć ten błąd.

+0

Cóż, ma to sens, myślę, że Eclipse używał do podkreślenia pojedynczego "=" w instrukcjach if jako błąd, ale Net Beans nie ... może być przydatny jako dobra praktyka, Dzięki! – alchemication

Powiązane problemy