2012-06-01 7 views
8

Dies ist eine Frage, die mich für eine lange Zeit nervt und kann eine Antwort nicht finden ... Bemerkt es ziemlich viel von Zend Framework Entwickler verwendet wird,PHP - umgekehrt, um in if-Anweisung

Was ist der Unterschied zwischen zwei "if" -Anweisungen zu folgen? :

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

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

Für mich sieht die erste irgendwie seltsam;]

Danke für Antwort.

Antwort

13

Dies ist kein Unterschied für die Art und Weise Ihr Skript funktioniert, es ist nur eine Codierungsstandard, eine Empfehlung

der Grund, warum es wird empfohlen, es auf diese Weise zu nutzen:

if (null == $this->user) 

ist die Tatsache, dass, wenn Sie falsch eingeben und = statt schreiben == Sie erhalten ein Fehler, während

($this->user = null) 

statt

($this->user == null) 

funktioniert, aber verursacht seltsame Fehler (Zuordnung und der Endwert wird als Bool statt Vergleich ausgewertet)

und ich denke, es verlängert nur als eine Gewohnheit der strengen Vergleichsoperator (===)

Update: seit ich sehe, dass es noch einige Aktivitäten in diesem Thread gibt, auch 3 Jahre nachdem ich die Antwort geschrieben habe, stelle ich fest Ich würde etwas hinzufügen, das ich vergessen habe zu erwähnen. Diese Art der Notation ist bekannt als yoda conditions, Sie können mehr darüber auf this wikipedia page zum Beispiel lesen.

+1

Danke! Dead einfach aber konnte keine Antworten finden ... – alchemication

+0

@alchemication Ich bin froh, dass es hilft, es war eine nette Frage +1 – mishu

+0

klingt auch wie ein wirklich guter Grund zu verwenden 'is_null ($ var)' oder '! Is_null ($ var) 'wann immer möglich und praktisch. Nimmt die Ratespiele heraus. – RockyFord

1

Beim Vergleichen von Werten gibt es keinen Unterschied in der Reihenfolge.

Es kann für jemanden leichter sein, einen solchen Code zu lesen oder zu schreiben, aber für mich ist es das gleiche wie von rechts nach links schreiben.

1

Diese Reihenfolge der Elemente im Vergleich, denke ich, soll zufällige Zuordnung in If-Anweisungen verhindern.

1

Das Ergebnis wird das gleiche sein, aber das zweite ist logisch. Sie möchten überprüfen, ob die Variable NULL ist, nicht, wenn NULL die Variable ... Der Grund dafür die andere Art und Weise zu tun um hier beschrieben wird: http://umumble.com/blogs/Programming/321/

1

Diese heißen Yoda-Bedingungen.

Die Idee ist, dass, wenn Sie den Wert zuerst setzen (wie falsch, null, wahr oder irgendetwas kurz) es für eine Person leichter wird, die Aussage zu scannen und die Absicht der Bedingung schnell zu verstehen.

Auch, was mishu sagte :)

1

Wenn Sie versehentlich schreiben:

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

erhalten Sie einen Syntaxfehler erhalten.

Wenn Sie versehentlich schreiben:

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

Sie einen Grund für das seltsame Verhalten der Anwendung für eine lange Zeit auf der Suche werden.

+0

Ok, vielen Dank. Genau das habe ich gesucht! – alchemication

4

Es ist eine gute Praxis zum Schreiben if Aussage. Betrachten Sie diesen Code:

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

Wenn Sie ein Gleichheitszeichen vergessen:

if (10 = $var) { } 

Dann wird PHP Parse-Fehler erzeugen, so dass Sie wissen, dass Sie ein = verpasst und man kann es beheben. Aber dieser Code:

if ($var = 10) { } 

wird zuweisen 10-$var und ergibt immer wahren Zustand. Was immer der Inhalt von $var ist, der obige Code wird immer 'wahr' wiedergeben und es ist sehr schwierig, diesen Fehler zu finden.

+0

Nun, macht Sinn, ich denke, dass Eclipse verwendet, um ein einzelnes "=" in if-Anweisungen als ein Fehler zu markieren, aber Net Beans nicht ... so könnte als eine gute Praxis nützlich sein, Danke! – alchemication

Verwandte Themen