not - ¿Cómo uso el operador ternario(?:) En PHP como una abreviatura de "if/else"?
php if else (10)
PHP 7+
A partir de PHP 7, esta tarea se puede realizar simplemente mediante el uso del operador coalescente nulo de esta manera:
echo $address[''street2''] ?? ''Empty'';
En base a los ejemplos de esta página , tengo los ejemplos del código que funcionan y que no funcionan a continuación.
Código de trabajo usando instrucción if
:
if (!empty($address[''street2''])) echo $address[''street2''].''<br />'';
Código no funcional que utiliza un operador ternario:
$test = (empty($address[''street2''])) ? ''Yes <br />'' : ''No <br />'';
// Also tested this
(empty($address[''street2''])) ? ''Yes <br />'' : ''No <br />'';
ACTUALIZAR
Después de la sugerencia de Brian, descubrí que echo $test
produce el resultado esperado. ¡Lo siguiente funciona como un encanto!
echo (empty($storeData[''street2''])) ? ''Yes <br />'' : ''No <br />'';
Aquí hay otros ejemplos que puede usar en sus proyectos, si tiene alguna pregunta.
$value1 = ''1'';
$value2 = ''2'';
$value3 = ''3'';
// 1 Condition
$v1 = ($value1 == ''1'') ? TRUE : FALSE;
var_dump($v1);
echo "<br>";
// 2 Conditions
$v2 = ($value1 == '''' ? TRUE : ($value2 == ''2'' ? TRUE : FALSE));
var_dump($v2);
echo "<br>";
// 3 Conditions
$v3 = ($value1 == '''' ? TRUE : ($value2 == '''' ? TRUE : ($value3 == ''3'' ? TRUE : FALSE)));
var_dump($v3);
echo "<br>";
// 4 Conditions
$v4 = ($value1 == ''1'') ? ($value2 == ''2'' ? ($value3 == ''3'' ? TRUE : ''FALSE V3'') : ''FALSE V2'') : ''FALSE V1'' ;
var_dump($v4);
echo "<br>";
Creo que usaste los corchetes de la manera incorrecta. Prueba esto:
$test = (empty($address[''street2'']) ? ''Yes <br />'' : ''No <br />'');
Creo que debería funcionar, también puedes usar:
echo (empty($address[''street2'']) ? ''Yes <br />'' : ''No <br />'');
El operador ternario es solo una abreviatura de bloque if / else. Su código de trabajo no tiene una condición else, por lo que no es adecuado para esto.
El siguiente ejemplo funcionará:
echo empty($address[''street2'']) ? ''empty'' : ''not empty'';
Puedes hacer esto aún más corto reemplazando echo
por <?=?>
<?=(empty($storeData[''street2''])) ? ''Yes <br />'' : ''No <br />''?>
Esto es útil especialmente cuando se quiere determinar, dentro de una barra de navegación, si la opción de menú se debe mostrar como ya se ha visitado (hecho clic) o no:
<li<?=($basename==''index.php'' ? '' class="active"'' : '''')?>><a href="index.php">Home</a></li>
También hay un operador ternario taquigráfico y se ve así:
(expresión1)?: expresión2 devolverá expresión1 si se evalúa como verdadera o expresión2 en caso contrario.
Ejemplo:
$a = ''Apples'';
echo ($a ?: ''Oranges'') . '' are great!'';
regresará
Apples are great!
Desde PHP 5.3, es posible omitir la parte central del operador ternario. Expresión expr1?: Expr3 devuelve expr1 si expr1 se evalúa como VERDADERO, y expr3 en caso contrario.
Del manual de PHP
Tenga en cuenta que al usar operadores condicionales anidados, puede usar paréntesis para evitar posibles problemas.
Parece que PHP no funciona de la misma manera que al menos JavaScript o C #.
$score = 15;
$age = 5;
// The following will return "Exceptional"
echo ''Your score is: '' . ($score > 10 ? ($age > 10 ? ''Average'' : ''Exceptional'') : ($age > 10 ? ''Horrible'' : ''Average''));
// The following will return "Horrible"
echo ''Your score is: '' . ($score > 10 ? $age > 10 ? ''Average'' : ''Exceptional'' : $age > 10 ? ''Horrible'' : ''Average'');
El mismo código en Javascript y C # devuelve "Excepcional" en ambos casos.
En el segundo caso, lo que hace PHP es (o al menos eso es lo que entiendo):
- es
$score > 10
? sí - es
$age > 10
? no, ¿entonces la$age > 10 ? ''Average'' : ''Exceptional''
actual$age > 10 ? ''Average'' : ''Exceptional''
$age > 10 ? ''Average'' : ''Exceptional''
devuelve ''Excepcional'' - luego, en lugar de simplemente detener toda la declaración y devolver ''Excepcional'', continúa evaluando la siguiente afirmación
- la siguiente declaración se convierte en
''Exceptional'' ? ''Horrible'' : ''Average''
''Exceptional'' ? ''Horrible'' : ''Average''
que devuelve ''Horrible'', como ''Excepcional'' es verdad
De la documentación: http://php.net/manual/en/language.operators.comparison.php
Se recomienda que evite "apilar" expresiones ternarias. El comportamiento de PHP cuando se usa más de un operador ternario dentro de una sola declaración no es obvio.
los
(condition) ? /* value to return if condition is true */
: /* value to return if condition is false */ ;
la sintaxis no es un operador de "taquigrafía si" (el ?
se llama el operador condicional) porque no puede ejecutar el código de la misma manera que si lo hiciera:
if (condition) {
/* condition is true, do something like echo */
}
else {
/* condition is false, do something else */
}
En su ejemplo, está ejecutando la instrucción echo
cuando la $address
no está vacía. No puede hacer esto de la misma manera con el operador condicional. Sin embargo, lo que puede hacer es echo
el resultado del operador condicional:
echo empty($address[''street2'']) ? "Street2 is empty!" : $address[''street2''];
y esto mostrará "¡La calle está vacía!" si está vacío, de lo contrario mostrará la dirección street2.
Declaración básica verdadera / falsa
$is_admin = ($user[''permissions''] == ''admin'' ? true : false);
Mensaje de bienvenida condicional
echo ''Welcome ''.($user[''is_logged_in''] ? $user[''first_name''] : ''Guest'').''!'';
Mensaje de elementos condicionales
echo ''Your cart contains ''.$num_items.'' item''.($num_items != 1 ? ''s'' : '''').''.'';
Mensaje de bienvenida condicional
echo ''Welcome ''.($user[''is_logged_in''] ? $user[''first_name''] : ''Guest'').''!'';
Anclaje PHP anidado
echo ''Your score is: ''.($score > 10 ? ($age > 10 ? ''Average'' : ''Exceptional'') : ($age > 10 ? ''Horrible'' : ''Average'') );