2010-10-25 12 views
9

ich dies in der Regel schreiben:PHP: Reihenfolge der Operatoren in einem Vergleich null

if ($myvar == null) 

aber manchmal lese ich dies:

if (null == $myvar) 

Ich erinnere mich, jemand sagte mir, diese besser ist, aber ich ziehe‘ Erinnere dich warum.

Wissen Sie, was besser ist und warum?

Danke, Dan

+1

Dies ist ein Duplikat von http://stackoverflow.com/questions/271561/why-does-one-oft-see-null-variable-instead-of-variable-null-in-c und viele andere – Harmen

Antwort

11

Wenn Sie versehentlich eine der = vergessen, wird der zweite einen Fehler geben.

if ($myvar = null) 

Dies wird null zu $myvar zuweisen und die if Prüfung auf das Ergebnis durch.

if (null = $myvar) 

Dies wird versuchen, den Wert von $myvar zu null zuweisen und einen Fehler, weil Sie nicht zu null zuweisen können.

+0

I sehen. Das macht Sinn. Vielen Dank! – Tom

1

Es geht nicht um die Reihenfolge, es geht darum, versehentliches Überspringen eines = zu vermeiden, was zu einer Zuweisung anstelle eines Vergleichs führt. Bei der Constant-First-Konvention wird versehentliches Überspringen einen Fehler verursachen.

0

Ich habe die letztere verwendet gesehen Programmierer Fehler zu vermeiden zu helfen, wie:

if($myvar = null) 

dies wird immer true zurück, während

if(null = $myvar) 

wird einen Fehler werfen.

+0

Nein, die erste wird 'null' zurückgeben, was in der booleschen Umwandlung zu 'false' führt, also wird diese Bedingung niemals bestehen. Das andere Problem ist, dass auch $ myvar auf null gesetzt wird. – lonesomeday

0

Sie können stattdessen is_null() verwenden.

+0

Nicht das, was er gefragt hat, das ist Operandenreihenfolge. – fredley

0

Mit dem Zuweisungsoperator = anstelle des Gleichheitsoperator == ist ein häufiger Fehler:

if($myvar = null) 

die eigentlich null zu $myvar zuweist. Eine Möglichkeit, diese logischen Fehler zu erhalten gefangen ist die Konstante auf der LHS zu verwenden, so dass, wenn Sie = anstelle von == verwenden Sie einen Fehler als Konstanten (null in diesem Fall) erhalten kann nicht zugewiesenen Werte sein:

1

Was diese Person hat möglicherweise auf Mikrooptimierungen in Bezug auf bedingte Aussagen angespielt. Zum Beispiel würde im folgenden die zweite Bedingung nicht als die erste bewertet, die bereits fehlgeschlagen ist.

if (1 == 0 && 1 == 1) 

Was Sie jedoch haben, wird immer ausgewertet werden. Daher ist Ordnung egal, und die bereits erwähnte Konvention ist der richtige Weg.