2010-08-27 14 views
11

Ich benutze den ternären Operator ziemlich oft, aber ich konnte nichts in der Dokumentation darüber finden und ich habe es immer gewundert.PHP Ternäre Operator Klärung

Das Folgende ist ein mögliches Beispiel:

echo ($something->message ? $something->message : 'no message'); 

wie Sie sehen können, wenn $ etwas-> Nachricht korrekt ist, kehren wir zurück $ etwas-> Nachricht, aber warum es zweimal schreiben? Gibt es eine Möglichkeit, wie etwas zu tun ist:

echo ($something->message ? this : 'no message'); 

Jetzt bin ich nicht gut in der Programmierung Theorie bewandert, ist es so möglich, dass es ein Grund ist, dass erstere nicht mit etwas wie „this“ verwiesen wird, sondern warum nicht? Würde dies die Verwendung des ternären Operators nicht streamen? Für so etwas wie mein Beispiel ist es ziemlich nutzlos, aber lassen Sie sich sagen, dass es

echo (function(another_function($variable)) ? function(another_function($variable)) : 'false'); 

ist Ich bin nicht in der Lage jeden Weg zu finden, dies zu tun, so dass ich nehme an, es nicht möglich ist, wenn ich falsch bitte informieren ich, sonst: warum nicht? Warum ist das nicht möglich, was ist der technische Grund, oder ist es nur etwas, das nie passiert ist? Soll ich es als Variable deklarieren und dann gegen diese Variable testen?

+0

möglich Duplikat von [Hat PHP eine Standardzuweisungssprache wie Perl?] (Http://stackoverflow.com/questions/2958630/does-php-have-a-default-assignment-idiom-like-perl) – outis

Antwort

19

Seit PHP 5.3 ist es möglich, den mittleren Teil des ternären Operators wegzulassen. Expression expr1?: Expr3 gibt expr1 zurück, wenn expr1 TRUE ergibt, andernfalls expr3.

Source

Zum Beispiel

$used_value = function1() ?: $default_value; 

ist die gleiche wie

$check_value = function1(); //doesn't re-evaluate function1() 
if($check_value) { 
    $used_value = $check_value; 
} else { 
    $used_value = $default_value; 
} 

Wort für die weise

Wenn Sie abhängig von typecasting zu TRUE werden, ist es wichtig zu verstehen, was Typ TRUE Typcast und was nicht. Es lohnt sich wahrscheinlich, auf type juggling PHP aufzuräumen und die type conversion tables zu lesen. Zum Beispiel ist (bool)array()FALSE.

+1

Wer auch immer diesen Patch eingereicht hat, ist mein Held. Ich habe gerade diese Seite gelesen und scheinbar gerade über diesen Teil hinweggesprungen. Danke, vielleicht sollte ich dann upgraden. Ich akzeptiere deine Antwort, wenn das Zeitlimit abgelaufen ist! – sam

+0

'echo ($ etwas-> Nachricht?: 'Keine Nachricht');' im Falle des ersten Beispiels des OP. –

+1

+1 Lassen Sie es zu php, um Sie mit einer obskuren Implementierung des ternären Betreibers aller Dinge zu überraschen :) Ich muss die Inkongruenzen lieben. –