Ich bin an Java gewöhnt und denke daher immer, dass Bedingungen von links nach rechts interpretiert werden, dh es gibt einen entscheidenden Unterschied in null != $obj
und$obj != null
Dies scheint bei PHP nicht der Fall zu sein.
Kann ich in PHP etwas falsch machen, wenn ich immer null
auf der linken Seite beginne ? Kann ich mein Verhalten von Java fernhalten oder muss ich mich darin üben, etwas anderes zu tun, wenn ich mit PHP-Bedingungen umgehe?
php
object-oriented
code-quality
conditions
Wizard Of Tech
quelle
quelle
null = $a
ist Aufgabe undnull != $a
ist Vergleich, meintest dunull == $a
?null = $a
funktioniert nicht, und ja, bei Zuweisungen ist die Reihenfolge der Interpretation von Bedeutung - und es würde auch in Java nicht funktionieren. Sprechen wir über Bedingungen oder Aufgaben?Antworten:
Ich empfehle Ihnen, immer die strengen Vergleichsoperatoren zu verwenden
===
und!==
wenn möglich. Sie werden wissen, wann Sie tatsächlich lose Vergleichsoperatoren benötigen .Missverständnisse
Ich glaube, Sie können über ein paar Dinge verwirrt sein:
Nein,
PHP wertet die Bedingungen von links nach rechts aus, stoppt jedoch, sobald das Ergebnis bekannt ist:
Wenn
expr1
ausgewertet wirdfalse
,expr2
wird nicht ausgewertet. Dies wird als Kurzschluss bezeichnet und scheint nicht sehr gut dokumentiert zu sein. Ich konnte außer dem Kommentar in Beispiel 1 keine andere offizielle Anmerkung zu diesem Thema finden. Es ist jedoch ein bekanntes Merkmal.Irrtümer
Ergo: nichts - keine Folge. Die Schlussfolgerung folgt nicht aus der Prämisse. Verwendung
constant == $variable
oder$variable == constant
nicht verbunden mit Kurzschluss , Reihenfolge der Auswertung oder Vorrang des Bedieners .Undefiniertes Verhalten
Beide Operanden von
!=
werden immer ausgewertet. Im Fall von PHP ist die Evaluierungsreihenfolge (die hier irrelevant ist) tatsächlich nicht spezifiziert (wie in der Dokumentation nicht angegeben).quelle
"nor is there in Java to my knowledge."
I 15,7 Abschnitt gelesen haben, aber es ist nicht wichtig hier . Solange Sie in Ihrem Vergleich keine Nebenwirkungen haben (wie in Ihrem Beispiel), spielt die Reihenfolge der Bewertung keine Rolle. Welchen Teil empfinden Sie als beleidigend?In Bezug auf Ihren speziellen Fall wäre ein anderer Ansatz, die eingebaute PHP-Funktion is_null zu verwenden. Sie würden also mit is_null ($ MixedValue) enden, das die ganze Arbeit für Sie erledigt und den Typvergleich und alles andere richtig macht.
quelle
@ phant0m: OK Punkt genommen ... NIEMALS VERWENDEN! = oder == immer verwenden! === und === wenn Sie mit PHP codieren. Daher war diese Frage am Anfang falsch, und es gibt keine Best Practice mit NULL auf beiden Seiten der Bedingung, wenn es um PHP geht.
quelle
$a == NULL
verschlüsselt die Absicht,NULL == $a
fügt einen Schutz hinzu), und diese Sicherheit ist nicht einmal so stark, weil Sie sich immer noch auf manuelle Arbeit (Gewohnheiten) anstatt auf unschlagbare automatisierte Überprüfungen verlassen. Ich denke nicht, dass sich der Kompromiss lohnt, aber das ist eine Frage der persönlichen Meinung.23 == num_apples
) anstatt "wenn Sie dreiundzwanzig Äpfel haben" (num_apples == 23
) .>
und<
lese ich es eher wie "Wenn das größer ist", dann lese das, das größer sein sollte, damit die Bedingung besteht, dann die andere Seite.