it-swarm.com.de

Was ist ?: in PHP 5.3?

Mögliches Duplikat: Wie heißen die PHP) -Operatoren “?” Und “:” und was tun sie? tun sie?

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, die ab PHP 5.3 verfügbar sind:

  1. Die [~ # ~] dir [~ # ~] Konstante
  2. Der?: Operator
  3. Anonyme Funktionen

  1. Was macht Nummer 2 mit dem ?: in PHP= 5.3?

  2. Was verstehen sie unter anonymen Funktionen? Gab es das nicht schon eine Weile?

82
JasonDavis

?: ist eine Form des bedingten Operators, die zuvor nur verfügbar war als:

expr ? val_if_true : val_if_false

In 5.3 ist es möglich, den Mittelteil wegzulassen, z. expr ?: val_if_false was äquivalent ist zu:

expr ? expr : val_if_false

Aus dem manuell :

Seit PHP 5.3 ist es möglich, den mittleren Teil des bedingten Operators wegzulassen. Ausdruck expr1 ?: expr3 kehrt zurück expr1 wenn expr1 ergibt TRUE und expr3 Andernfalls.

134
Ben James

Das ?: Operator ist der bedingte Operator (oft als der ternäre Operator bezeichnet):

Der Ausdruck (expr1) ? (expr2) : (expr3) ergibt expr2 wenn expr1 ergibt [~ # ~] true [~ # ~] und expr3 wenn expr1 ergibt [~ # ~] false [~ # ~] .

Im Falle des:

expr1 ?: expr2

Der Ausdruck ergibt den Wert von expr1 wenn expr1 ist wahr und expr2 Andernfalls:

Seit PHP 5.3 ist es möglich, den mittleren Teil des ternären Operators wegzulassen. Ausdruck expr1 ?: expr3 kehrt zurück expr1 wenn expr1 ergibt [~ # ~] true [~ # ~] und expr3 Andernfalls.

35
Gumbo

Schau mal hier:

Seit PHP 5.3 ist es möglich, den mittleren Teil des ternären Operators wegzulassen.

Anonyme Funktionen: Nein, sie existierten nicht vor 5.3. (siehe den ersten Hinweis unter den Beispielen), um Zumindest auf diese Weise:

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

Die einzige Möglichkeit war create_function(), was langsamer, ziemlich umständlich und fehleranfällig ist (da Zeichenfolgen für Funktionsdefinitionen verwendet werden).

5
Boldewyn