Grundsätzlich wertet der Interpreter diesen Ausdruck von links nach rechts aus, also:
echo $test == 'one' ? 'one' : $test == 'two' ? 'two' : 'three';
wird interpretiert als
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
Und der Ausdruck in Klammern ergibt wahr, da sowohl "eins" als auch "zwei" nicht null/o/andere Form von falsch sind. Wenn es also so aussehen würde:
echo $test == 'one' ? FALSE : $test == 'two' ? 'two' : 'three';
Er würde drei drucken. Damit es funktioniert, sollten Sie die Kombination von ternären Operatoren vergessen und reguläre ifs/switch für kompliziertere Logik verwenden, oder zumindest die Klammern verwenden, damit der Interpreter Ihre Logik versteht und die Prüfung nicht auf die Standard-LTR-Art durchführt:
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...
}