Básicamente intérprete evalúa esta expresión de izquierda a derecha, por lo que:
echo $test == 'one' ? 'one' : $test == 'two' ? 'two' : 'three';
se interpreta como
echo ($test == 'one' ? 'one' : $test == 'two') ? 'two' : 'three';
Y la expresión en paratheses como resultado true, ya que tanto 'uno' y 'dos 'no son nulos/o/otra forma de falso. lo tanto, si se vería así:
echo $test == 'one' ? FALSE : $test == 'two' ? 'two' : 'three';
Sería imprimir tres. Para que funcione bien, debe olvidarse de combinar operadores ternarios, y usar ifs/switch regular para una lógica más complicada, o al menos usar los corchetes, para que el intérprete comprenda su lógica, y no realice la comprobación en modo LTR estándar:
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...
}
oh mi ... mis ojos ... están quemando .... no puede ser invisible ... es –
no es tan malo. En otros idiomas, esto sería un modismo. En PHP, gracias a su asociatividad de operador mal elegida, es una trampa. – bobince
@bobince lo probaste en otros idiomas o simplemente asumiendo este – nik