Um eine Erklärung basierend auf Ihrem Code zu verwenden, wäre eine verkleinerte Version:
%Vor%In PHP entspricht dies dem Schreiben:
%Vor% Beim ersten Mal hat $i
den Wert von 0
, also gibt das erste ternäre 'first_row'
zurück und dieser String wird als Bedingung für das zweite Ternär verwendet - was im booleschen Kontext zu true
führt - daher wird 'last_row'
zurückgegeben.
Wenn Sie es neu gruppieren:
%Vor%dann wird das Ergebnis des ersten Ternärs das zweite Ternär nicht stören.
Aus der offiziellen PHP-Dokumentation :
"Es wird empfohlen, dass Sie Ternary-Ausdrücke nicht" stapeln ". Das Verhalten von PHP bei der Verwendung von mehr als einem ternären Operator in einer einzigen Anweisung ist nicht offensichtlich"
Offenbar, obwohl der ternäre Operator von PHP (und ein Großteil seiner Syntax sonst) auf C basiert, entschied sich PHP aus irgendeinem Grund für macht es links-assoziativ , während in C und den meisten anderen darauf basierenden Sprachen Der ternäre Operator ist rechtsassoziativ :
C:
%Vor%Perl:
%Vor%Java:
%Vor%JavaScript:
%Vor%PHP:
%Vor%Also, ja, ich denke, wir können mit Sicherheit sagen, dass PHP einfach (auch) in dieser Hinsicht Arsch-zurück ist.
Siehe Beispiel 3 auf php.net :
%Vor%Der wichtige Teil ist:
Dies liegt daran, dass ternäre Ausdrücke von links nach rechts ausgewertet werden
Sehen Sie sich die Antwort von JRL an. Um zu verdeutlichen, was mit Ihrem Beispiel passiert, sollten Sie verstehen, dass Ihr Ausdruck als solcher bewertet wird:
%Vor% Wenn also $i == 0
Ihre Aussage ist, wird dies im Wesentlichen so:
Da 'first_row'
zu true
auswertet,% 'last_row'
ist das Ergebnis, das zurückgegeben wird, wenn $i == 0
. Wenn $i
nicht gleich Null ist, wird Ihre Aussage im Wesentlichen so:
Tags und Links php if-statement ternary-operator