Pregunta

Hola solo quiero saber por qué este código rendimientos (al menos para mí) un resultado incorrecto.

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 corro este código, los resultados son descripción es bien 'Bond' o 'Otros' y me dejaron preguntando donde la cadena 'Papel:' fue ???

¿Fue útil?

Solución

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

Trate de añadir paréntesis, por lo que la cadena se concatena con una cadena en el orden correcto.

Otros consejos

Se relaciona con la precedencia de los operadores. Usted tiene que hacer lo siguiente:

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

Creo que todos dio la solución, me gustaría contribuir a la razón del resultado inesperado.

En primer lugar aquí se puede controlar el origen, y cómo se evalúan los operadores (izquierda, derecha, asociativas, etc.).

http://php.net/manual/fa/language.operators .precedence.php

Ahora bien, si analizamos su sentencia.

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

1) Se revisa la mesa y encontramos que los paréntesis se evalúan primero, luego el '' (Concatenación) es evaluada y al final el operador ternario, por lo tanto, podría asociar esta manera siguiente '?':

// evaluate the parenthesis ... ($ paperType == 'bond')
$ description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$ description = 'Paper: 1'? 'Bond': 'Other';

2) Tenemos ahora el operador ternario, sabemos que se evalúa una cadena "true"

// documentación de PHP Al convertir a boolean, los siguientes valores se consideran FALSO:

... la cadena vacía, y la cadena "0"

$ description = true? 'Bond': 'Other';

3) Finalmente

$ description = 'bond';

Espero haber aclarado la cuestión. Saludos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top