Fondamentalmente interprete la valuta questa espressione da sinistra a destra, in modo da:
echo $test == 'one' ? 'one' : $test == 'two' ? 'two' : 'three';
viene interpretato come
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
E l'espressione in paratheses restituisce true, dal momento che entrambi 'uno' e 'due 'non sono null/o/altra forma di falso. Quindi, se sarebbe simile:
echo $test == 'one' ? FALSE : $test == 'two' ? 'two' : 'three';
Sarebbe stampare tre. Per far sì che funzioni correttamente, dovresti dimenticare di combinare gli operatori ternari e utilizzare ifs/switch regolari per una logica più complicata, o almeno usare le parentesi, affinché l'interprete comprenda la tua logica e non esegua il controllo in modalità LTR standard:
echo $test == 'one' ? 'one' : ($test == 'two' ? 'two' : ($test == 'three' ? 'three' : 'four'));
//etc... It's not the most understandable code...
//You better use:
if($test == 'one')
echo 'one';
else { //or elseif()
...
}
//Or:
switch($test) {
case 'one':
echo 'one';
break;
case 'two':
echo 'two';
break;
//and so on...
}
fonte
2010-04-17 14:41:59
oh mio ... i miei occhi ... stanno bruciando .... non può essere invisibile ... –
E ' non così male. In altre lingue, questo sarebbe un idioma. In PHP, grazie alla sua associatività dell'operatore scelta male, è una trappola. – bobince
@bobince l'hai provato in altre lingue o stai assumendo questo – nik