73

Eventuali duplicati: What are the PHP operators “?” and “:” called and what do they do?Che cos'è?: In PHP 5.3?

Da http://twitto.org/

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

Twitto utilizza diverse nuove funzionalità disponibili a partire da PHP 5.3:

  1. Il DIR costante
  2. L'operatore?:
  3. funzioni anonime

  1. Cosa fa il numero 2 che fare con la :? in PHP 5.3?

  2. Inoltre, cosa significano per funzioni anonime? Non era qualcosa che è esistito per un po '?

+3

È stata risposto almeno due volte http://stackoverflow.com/questions/1080247/what-is-the-php-operator-called-and-what-doesit-do e http://stackoverflow.com/questions/2099834/what-does-this-syntax-in-php-mean – Gordon

+3

@gordon, so cosa significa su quegli argomenti, ho pensato che fosse qualcosa di diverso perché il sito ha detto che era NUOVO a partire da 5.3 e anche io mai visti insieme come "?:" – JasonDavis

+0

@Gordon quelli sono solo le forme più lunghe. @jasondavis, hai il: e? all'indietro nel titolo della domanda. – RJFalconer

risposta

123

?: è una forma dell'operatore condizionale che era precedentemente disponibile solo come:

expr ? val_if_true : val_if_false 

In 5.3 è possibile lasciare la parte centrale, per esempio expr ?: val_if_false che è equivalente a:

expr ? expr : val_if_false 

Dal manual:

Dal PHP 5.3, è possibile omettere la parte centrale del operatore condizionale. Expression expr1 ?: expr3 restituisce expr1 se expr1 restituisce TRUE e expr3 in caso contrario.

+1

Grazie! Ero confuso quando li ho visti insieme così "?:" E ho cercato ma non ho trovato nulla su di esso. – JasonDavis

+2

Hmm molto bello. Questo rende '?:' Equivalente a '||' in Javascript! – Paulpro

+3

Come bonus aggiuntivo, puoi "concatenarli": $ foo = $ bar?: $ Bazz?: $ Yadda?: $ Qux; // $ foo verrà assegnato il valore della prima variabile di verità. Non sono sicuro se questa sia una pessima idea (alcuni non piacciono ad annidare gli operatori ternari), ma è così. – MSpreij

35

L'operatore ?: è il conditional operator (spesso riferito come l'operatore ternario):

L'espressione (expr1) ? (expr2) : (expr3) viene valutato come expr2 se expr1 viene valutato come TRUE e expr3 se expr1 viene valutato come FALSE.

Nel caso di:

expr1 ?: expr2 

L'espressione restituisce il valore di expr1 se expr1 è vero e expr2 altrimenti:

Dal PHP 5.3, è possibile lasciare fuori la parte centrale dell'operatore ternario. Expression expr1 ?: expr3 restituisce expr1 se expr1 restituisce TRUE e expr3 in caso contrario.

4

Look here:

Dal PHP 5.3, è possibile omettere la parte centrale del operatore ternario. Espressione expr1?: Expr3 restituisce expr1 se expr1 restituisce TRUE ed expr3 in caso contrario.

funzioni Anonimi: No, essi non esistono before 5.3.0 (si veda la prima nota di seguito gli esempi), per lo meno in questo modo:

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

L'unico modo era create_function(), che è più lento, piuttosto ingombrante e soggetto a errori (a causa dell'utilizzo di stringhe per le definizioni di funzione).

Problemi correlati