2012-04-22 19 views
5

Ok quindi ho appena realizzato un comportamento strano con PHP e vorrei sapere perché questo accade. Quindi, l'esecuzione di questo codice:Dichiarazione ternaria PHP che usa 'e'

var_dump(true and false ? 'one' : 'two'); 

uscite

boolean true 

invece di 'due' come ci si aspetterebbe ... Il problema sembra essere con 'e'.

Esecuzione:

var_dump(true && false ? 'one' : 'two'); 

uscite

string 'two' (length=3) 

proprio come previsto. Perché utilizzare 'e' invece di '& &' causa questo strano comportamento? Non dovrebbero essere uguali?

+0

Mi piacerebbe sapere la risposta a questo. La mia ipotesi è l'ordine .. Nel primo, falso è usato per l'operatore ternario che esce per vero e 'due', che valuta il vero ... – DanRedux

+0

Sembra che avevo ragione. : P – DanRedux

risposta

5

Questo perché ?: è superiore a precedence rispetto a and, ma inferiore a &&.

+0

Wow, è semplicemente sciocco. C'è una ragione logica per cui 'and' e' && 'non hanno la stessa prece- denza? – dtbarne

+0

Ora questo non ha senso sul perché lo hanno fatto ... ora mi rendo conto che usando $ uno e $ due || $ tre per esempio non è uguale a $ uno e $ 2 || $ Tre. Grazie per questo. – Zaptree

+1

@dtbarne @Zaptree: in realtà esiste una ragione abbastanza semplice per avere due distinti operatori logici e booleani con diverse precedenze. '||' e '&&' sono usati per concatenare e alternare espressioni booleane, mentre 'or' e' and' sono casi usati come '$ result = mysql_query (...) o die (mysql_error());' (che è ovviamente un codice errato), cioè sono più una logica alternata o concatenante. – NikiC

3

È perché and ha priorità inferiore a && e ?:.

+0

grazie per la risposta, tu dove 1 secondo dopo Radu: P – Zaptree

Problemi correlati