Dieser Artikel stellt hauptsächlich ein Problem und eine Lösung vor, die bei PHP-Bedingungsoperatoren auftreten. Es hat einen gewissen Referenzwert. Jetzt können Freunde in Not darauf verweisen.
Ich bin darauf gestoßen Frage zur verschachtelten Verwendung von bedingten Operatoren (ternäre Ausdrücke) in PHP
Sehen wir uns zunächst einen Teil des C-Sprachcodes an (test.c ):
#include<stdio.h> int main() { int x = 1; int shit = x == 1 ? 100 : x == 2 ? 200 : 300; printf("shit的值:%d\n", shit); return 0; }</stdio.h>
Kompilieren und ausführen
root$ gcc test.c -o test && ./test shit的值:100
Die Antwort ist wie erwartet, denn x==1, also wird 100 Scheiße zugewiesen.
Aber wenn wir den obigen Code in PHP umschreiben (test.php):
<?php $x = 1; $shit = $x == 1 ? 100 : $x == 2 ? 200 : 300; echo "shit的值:$shit\n";
Führen Sie ihn aus:
root$ php test.php shit的值:200
Wir stellen fest, dass die Ergebnisse zurückgegeben werden sind unterschiedlich, warum ist das so?
Zuerst vermute ich, dass es sich möglicherweise um ein vorrangiges Problem mit dem Vergleichsoperator(==) und dem Bedingungsoperator handelt (?:) in PHP, schauen wir uns die offizielle PHP-Dokumentation an.
== hat eine höhere Priorität als ?: (C-Sprache Dies ist auch der Fall), daher ist
$shit = $x == 1 ? 100 : $x == 2 ? 200 : 300;
äquivalent zu
$shit = ($x == 1) ? 100 : ($x == 2) ? 200 : 300;
und ist tatsächlich wahr, wenn es einmal ausgeführt wird. Dies kann die Möglichkeit ausschließen, dass der Operatorvorrang das verursacht Problem.
Aber im offiziellen Dokument gibt es diesen Satz am Beispiel der Operatorkombinationsrichtung:
Dies ist dem oben beschriebenen Phänomen sehr ähnlich. Das Problem sollte hier liegen. Nach einigen Recherchen kam ich zu folgendem Schluss:
Die Kombinationsrichtung des Bedingungsoperators (?:) in der Sprache C ist von rechts nach links, jede Auswertung beginnt mit dem Unterausdruck ganz rechts, also
int x = 1; int shit = x == 1 ? 100 : x == 2 ? 200 : 300; //等效于 int shit = x == 1 ? 100 : (x == 2 ? 200 : 300); //等效于 int shit = x == 1 ? 100 : (300);// 100
Kombination der PHP-Bedingungsoperatoren (?:) Die Richtung ist von links nach rechts , und jede Auswertung beginnt mit dem Unterausdruck ganz links, sodass
$x = 1; $shit = $x == 1 ? 100 : $x == 2 ? 200 : 300; //等效于 $shit = ($x == 1 ? 100 : $x == 2) ? 200 : 300; //等效于 $shit = (100) ? 200 : 300;// 200
zwischen der PHP-Kombinationsrichtung des bedingten Operators liegt. Wir können den Effekt von if-elseif nicht erzielen. elseif-else-Ausdruck durch Verschachtelung von bedingten Operatoren wie C/C++, es sei denn, wir fügen den späteren Unterausdrücken Klammern hinzu, in diesem Fall kann es auf diese Weise gelöst werden:
$shit = $x == 1 ? 100 : ($x == 2 ? 200 : 300);
$shit = $x == 1 ? 100 : ($x == 2 ? 200 : ($x== 3 ? 300 : ... ($x == 8 ? 800 : 900)))))));
Es wird empfohlen, das Verhalten von ternären Ausdrücken von PHP zu vermeiden wenn die Verwendung von mehr als einem ternären Operator innerhalb einer einzelnen Anweisung nicht offensichtlich ist
Das ist es. Der gesamte Inhalt dieses Artikels soll für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie im PHP-Chinesisch Webseite!
Verwandte Empfehlungen:
Lassen Sie uns über Abhängigkeitsinjektion, Container und Erscheinungsmuster in der Framework-Entwicklung sprechen (Teil 2) So lösen Sie das große Problem von PHP-Problemen mit Parallelität und großem DatenverkehrDas obige ist der detaillierte Inhalt vonÜber ein Problem, auf das der bedingte PHP-Operator stößt, und seine Lösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!