2009-08-23 19 views
41

Hola, solo quiero saber por qué este código produce (al menos para mí) un resultado incorrecto.Operador ternario y peculiaridad de concatenación de cadenas?

Bueno, probablemente estoy en falta aquí

$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other'; 

Yo estaba adivinando que si paperType es igual a 'Bond', entonces descripción es 'papel: Bond' y si paperType no es igual a 'Bond', entonces Descripción es 'Papel: Otro'.

Pero cuando ejecuto este código los resultados son la descripción es 'Bond' o 'Otro' y me dejó preguntándome dónde estaba la cadena 'Papel:' ???

Respuesta

76
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other'); 

Intente agregar paréntesis para que la secuencia se concatene a una cadena en el orden correcto.

+0

Sí, funciona, por lo que es un problema de prioridad de operadores en mi código, la culpa es mía; ~) – Cesar

+1

pero no realmente entiende perfectamente qué está sucediendo ... – Cesar

+1

' Papel: 'se está aplicando primero a boolean (el resultado de $ paperType ==' bond '), en otras palabras, el código no está sucediendo en el orden correcto. –

8

Está relacionado con la precedencia del operador. Usted tiene que hacer lo siguiente:

$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');