Was ist ?: in PHP 5.3? [duplicate]

Lesezeit: 3 Minuten

Was ist in PHP 53 duplicate
Jason Davis

Mögliches Duplikat:
Was sind die PHP-Operatoren „?“ und „:“ aufgerufen und was machen 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 der ?: in PHP5.3?

  2. Und was meinen sie mit anonymen Funktionen? Gab es das nicht schon länger?

  • Wurde mindestens zweimal beantwortet stackoverflow.com/questions/1080247/… und stackoverflow.com/questions/2099834/…

    – Gordon

    28. Januar 2010 um 8:43 Uhr


  • @gordon, ich weiß, was das zu diesen Themen bedeutet, ich dachte, das wäre etwas anderes, weil die Seite sagte, es sei NEU ab 5.3, und ich habe sie auch nie zusammen gesehen wie “?:”

    – Jason Davis

    28. Januar 2010 um 8:50 Uhr

  • @Gordon das sind nur die längeren Formen. @jasondavis, du hast die : und ? rückwärts im Fragentitel.

    – RJFalconer

    28. Januar 2010 um 8:54 Uhr

  • ach okay. Die Neu Sache ist, dass Sie den Mittelteil weglassen können. Und anonyme Funktionen (Lambda und Closures) sind ebenfalls eine neue Ergänzung zu 5.3, obwohl Sie damit Funktionen erstellen könnten create_function Vor.

    – Gordon

    28. Januar 2010 um 9:01 Uhr


  • das ist kein Duplikat.

    – dwenaus

    9. Mai 2014 um 4:40 Uhr

1645914250 736 Was ist in PHP 53 duplicate
Ben James

?: ist eine Form des Bedingungsoperators, der zuvor nur verfügbar war als:

expr ? val_if_true : val_if_false

In 5.3 ist es möglich, den mittleren Teil wegzulassen, zB expr ?: val_if_false was äquivalent ist zu:

expr ? expr : val_if_false

Von dem Handbuch:

Seit PHP 5.3 ist es möglich, den mittleren Teil des Bedingungsoperators wegzulassen. Ausdruck expr1 ?: expr3 kehrt zurück expr1 wenn expr1 wertet zu TRUEund expr3 Andernfalls.

  • Danke! Ich war verwirrt, als ich sie so zusammen sah “?:” und ich suchte, konnte aber nichts darauf finden.

    – Jason Davis

    28. Januar 2010 um 8:52 Uhr

  • Hm sehr cool. Das macht ?: gleichwertig || in Javascript!

    – Paulus

    7. Mai 2012 um 1:27 Uhr

  • Als zusätzlichen Bonus können Sie sie “verketten”: $foo = $bar ?: $bazz ?: $yadda ?: $qux; // $foo wird der Wert der ersten Wahrheitsvariablen zugewiesen. Ich bin mir nicht sicher, ob dies eine schreckliche Idee ist (einige mögen es nicht, ternäre Operatoren zu verschachteln), aber da ist es.

    – MSpreis

    12. Februar 2014 um 16:00 Uhr


  • @MSpreij Ich würde sagen, das ist eine prägnante Verwendung davon. Normalerweise ist das Verschachteln von ternären Operatoren schrecklich, ja (ich würde in einigen Fällen bis zu einer verschachtelten Ebene vergeben). Die Alternative zum obigen wäre ein sehr langer und hässlicher if/elseif/else-Block, der wirklich nur eine Verschwendung ist. Solange es einen Kommentar wie den von Ihnen für unerfahrene Programmierer gibt, würde ich diese Verkettung vollkommen akzeptabel finden (und tatsächlich freue ich mich darauf, sie zu verwenden, danke für den Hinweis!).

    – Dämonenschlacht335

    26. Juni 2017 um 15:57 Uhr

  • @MSpreij Um weiter zu beweisen, dass es keine schreckliche Idee ist, hat PHP 7 das eingeführt Null-Koaleszenzoperator (Ich habe das selbst vergessen), was eine ähnliche Sache macht und die gleiche allgemeine Syntax hat – mit dem Unterschied isset() vs Wahrheitswert aber.

    – Dämonenschlacht335

    26. Juni 2017 um 16:03 Uhr

Was ist in PHP 53 duplicate
Gumbo

Die ?: Betreiber ist der Bedingter Operator (oft als ternärer Operator bezeichnet):

Der Ausdruck (expr1) ? (expr2) : (expr3) wertet zu expr2 wenn expr1 wertet zu WAHRund expr3 wenn expr1 wertet zu FALSCH.

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 wertet zu WAHRund expr3 Andernfalls.

1645914251 1 Was ist in PHP 53 duplicate
Boldewyn

Schau hier:

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

Anonyme Funktionen: Nein, es gab sie nicht vor 5.3.0 (siehe die erste Anmerkung unter den Beispielen), zumindest so:

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

Der einzige Weg war create_function()was langsamer, ziemlich umständlich und fehleranfällig ist (weil Strings für Funktionsdefinitionen verwendet werden).

868870cookie-checkWas ist ?: in PHP 5.3? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy