2015-07-07 19 views
5

Io uso seguito da qualche parte nel mio codice:operatore ternario con ampersand

if (isset($flat[$pid])) { 
    $branch = &$flat[$pid]['items']; 
} else { 
    $branch = &$tree; 
}  

Tutto ok, ma quando voglio brevemente per:

$branch = isset($flat[$pid]) ? &$flat[$pid]['items'] : &$tree; 

ottengo:

errore di sintassi, imprevisto '&' ...

Cosa sto facendo male?

+5

http://stackoverflow.com/questions/3389928/can-you-pass-by-reference-while-using-the-ternary-operator – Mihai

risposta

8

Questo perché ternary operator è un'espressione, quindi non valuta una variabile. E una citazione dal manuale:

Nota: prega di notare che l'operatore ternario è un'espressione, e che non valuta ad una variabile, ma per il risultato di un'espressione. È importante sapere se si desidera restituire una variabile per riferimento. La dichiarazione restituisce $ var == 42? $ a: $ b; in una funzione di ritorno per riferimento, quindi, non funzionerà e verrà emesso un avviso nelle successive versioni di PHP.

1

Ciò funzionerà in alternativa,

(isset($flat[$pid])) ? ($branch = &$flat[$pid]['items']) : ($branch = &$tree); 

Edit:

La più breve può andare saranno due linee,

@$temp = &$flat[$pid]['items']; 
$branch = &${isset($flat[$pid]) ? "temp" : "tree"}; 
+1

Molto criptico :) Preferisco la clausola 'if' in questo caso. –

+0

Sì, certo, ho modificato la mia risposta. potrebbe interessarti :) – Viral