2011-12-20 10 views
5

Sto avendo edizione con operatore ternario di PHP, dal PHP versione 5.3 si è in grado di sostituire l'operatore ternario stenografia con una versione ancora più brevestile più recente PHP operatore ternario è indesiderati risultato con la funzione isset

// Older version 
$route = isset($test) ? $test : 'test is NOT set'; 


// Newer version as of 5.3 
$route = isset($test) ?: 'test is NOT set'; 

Now on la versione più recente, se $test non è impostata. funziona bene Tuttavia, quando è impostato a causa del metodo isset(), restituisce true o 1 anziché il valore.

Devo utilizzare il metodo più vecchio per ottenere $route uguale al valore di $test invece di un valore booleano di 1?

+0

È possibile utilizzare '$ route = $ test?: 'Test NON è impostato';' invece. – FtDRbwLXw6

+1

Se non ti dispiace sopprimere i messaggi di errore puoi ancora usare la stenografia. Non è il modo "corretto" o "carino" per farlo, ma funziona ancora - $ route = @ $ test?: "Test NON è impostato"; –

risposta

9

Devi usare la versione più lunga.

Citando il docs: expr1

Espressione:? Rendimenti expr3 expr1 se espressione1 è TRUE, e expr3 altrimenti.

Quindi il comportamento corretto per la versione stenografica è restituire il risultato della valutazione isset($test). Non di $test come vuoi.

1

A partire da PHP 7, è possibile utilizzare l'operatore nulla coalescenza:

$route = $test ?? 'test is NOT set'; 

che equivale a

$route = isset($test) ? $test : 'test is NOT set'; 

Here potete trovare alcuni dettagli:

Il null l'operatore di coalescenza (??) è stato aggiunto come zucchero sintattico per il caso comune di dover utilizzare un ternario in congiunzione con isset(). Restituisce il suo primo operando se esiste e non è NULL; altrimenti restituisce il suo secondo operando.