<?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:
Die DIR Konstante
Der ?:-Operator
Anonyme Funktionen
Was macht Nummer 2 mit der ?: in PHP5.3?
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
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:
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
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.
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).
8688700cookie-checkWas ist ?: in PHP 5.3? [duplicate]yes
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