Warum hat WordPress-Code durchgehend die ungewöhnliche Reihenfolge „boolean literal === some dynamic expression“ von Vergleichsteilen?

Lesezeit: 1 Minute

Ich finde, dass WordPress-Code immer diese Art der Codierung hat:

if ( false === ( $value = get_transient( 'value' ) ) ) {
     // this code runs when there is no valid transient set
}

Ich würde erwarten, dass es so etwas wie if ( ( $value = get_transient( 'value' ) ) === false ).

Haben die WordPress-Entwickler einen Grund für die Verwendung dieser PHP-Syntax erwähnt? Es sollte irgendwo einen Hinweis darauf geben, aber diese Syntax ist schwer zu googeln.

(Ich glaube nicht, dass dies auf die WordPress-Site gehört, da es mehr mit der PHP-Syntax zusammenhängt.)

Es gibt eine Erklärung auf der WordPress-Seite:

https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#yoda-conditions

Es heißt Yoda-Bedingungen; Kurz gesagt, weil es für jemanden sehr einfach ist, den Zuweisungsoperator in PHP mit dem Gleichheitsoperator zu verwechseln, also eine Codezeile gegeben:

if (x = true) 

ist mit ziemlicher Sicherheit ein Tippfehler, erzeugt aber keine Fehler, da es sich um eine gültige Syntax handelt.

Auf der anderen Seite:

if (true = x) {

bedeutet, dass Sie versuchen, den Wert von zuzuweisen x zur Konstante trueund PHP wird das sehen und eine Fehlermeldung generieren.

Es ist also eine einfache Möglichkeit, einige der subtilen Syntaxprobleme zu vermeiden, mit denen PHP Sie davonkommen lässt.

Es ist ziemlich üblich in C. Leute verwenden es, um versehentliche Variablenattribute zu vermeiden, wie zum Beispiel:

if ($a == 5);
// Works as intended
if ($a = 5);
// Sets $a to 5


if (5 == $a);
// Works as intended

if (5 == $a);
// Compile Error

Die Leute nennen es: Yoda-Bedingungen

1143810cookie-checkWarum hat WordPress-Code durchgehend die ungewöhnliche Reihenfolge „boolean literal === some dynamic expression“ von Vergleichsteilen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy