73

Mögliche Duplizieren: What are the PHP operators “?” and “:” called and what do they do?Was ist?: In PHP 5.3?

Von http://twitto.org/

<?PHP 
    require __DIR__.'/c.php'; 
    if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; })) 
     throw new Exception('Error'); 
    $c(); 
?> 

Twitto verwendet mehrere neue Funktionen zur Verfügung, wie von PHP 5.3:

  1. Die DIR Konstante
  2. Der Operator?:
  3. Anonyme Funktionen

  1. Was ist die Nummer 2 tun mit dem : in PHP 5.3?

  2. Was meinen sie auch mit anonymen Funktionen? War das nicht schon etwas länger?

+3

Wurde mindestens zweimal http://stackoverflow.com/questions/1080247/what-is-the-php-operator-called-and-what-does-it-do und http://stackoverflow.com beantwortet/questions/2099834/was-ist-das-syntax-in-php-mean – Gordon

+3

@gordon, ich weiß, was das zu diesen Themen bedeutet, ich dachte, das war etwas anderes, weil die Seite sagte, es sei NEU von 5.3 und auch ich nie gesehen sie zusammen wie "?:" – JasonDavis

+0

@Gordon das sind nur die längeren Formen. @jasondavis, du hast das: und? rückwärts im Titel der Frage. – RJFalconer

Antwort

123

?: ist eine Form des Bedingungsoperator, die bisher zur Verfügung stand nur:

expr ? val_if_true : val_if_false 

In 5.3 ist es möglich, den mittleren Teil wegzulassen, z.B. expr ?: val_if_false, die gleich ist:

expr ? expr : val_if_false 

Vom manual:

Seit PHP 5.3 ist es möglich, den mittleren Teil des Konditionaloperator auszulassen. Ausdruck expr1 ?: expr3 gibt expr1 zurück, wenn expr1 zu TRUE und expr3 andernfalls auswertet.

+1

gemeint Danke! Ich war verwirrt, als ich sie so zusammen sah "?:" Und ich suchte, konnte aber nichts finden. – JasonDavis

+2

Hmm sehr cool. Das macht '?:' Äquivalent zu '||' in Javascript! – Paulpro

+3

Als zusätzlichen Bonus können Sie sie "verketten": $ foo = $ bar?: $ Bazz?: $ Yadda?: $ Qux; // $ foo wird der Wert der ersten truthy Variablen zugewiesen. Nicht sicher, ob das eine schreckliche Idee ist (manche mögen es nicht, ternäre Operatoren zu verschachteln), aber da ist es. – MSpreij

35

Der ?: Operator ist der conditional operator (oft als der ternäre Operator refered bis):

Der Ausdruck (expr1) ? (expr2) : (expr3) zu expr2 auswertet, wenn expr1 zu TRUE auswertet und expr3 wenn expr1 zu FALSE auswertet.

Im Falle von:

expr1 ?: expr2 

Der Ausdruck auf den Wert von expr1 auswertet, wenn expr1 ist wahr und expr2 sonst:

Seit PHP 5.3 ist es möglich, den mittleren Teil des ternären Operators auslassen. Der Ausdruck expr1 ?: expr3 gibt expr1 zurück, wenn expr1TRUE und expr3 ergibt.

4

Look here:

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

Anonyme Funktionen: Nein, sie existiert nicht before 5.3.0 (die erste Note unter den Beispielen sehen), zumindest in dieser Art und Weise:

function ($arg) { /* func body */ } 

Der einzige Weg create_function() war, das ist langsamer, ziemlich umständlich und fehleranfällig (wegen der Verwendung von Strings für Funktionsdefinitionen).