Según los ejemplos de esta página , tengo los ejemplos de código que funcionan y que no funcionan a continuación.
Código de trabajo usando if
declaración:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Código que no funciona con operador ternario:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
ACTUALIZACIÓN
Después de la sugerencia de Brian, descubrí que hacer eco $test
genera el resultado esperado. ¡Lo siguiente funciona como un encanto!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Respuestas:
los
la sintaxis no es un operador "taquigráfico si" (el
?
se llama operador condicional) porque no puede ejecutar código de la misma manera que si lo hiciera:En su ejemplo, está ejecutando la
echo
instrucción cuando$address
no está vacío. No puede hacer esto de la misma manera con el operador condicional. Sin embargo, lo que puede hacer esecho
el resultado del operador condicional:y esto mostrará "¡La calle está vacía!" si está vacío, de lo contrario mostrará la dirección street2.
fuente
condition ?: false
que evalúacondition
si es cierto?PHP 7+
A partir de PHP 7, esta tarea se puede realizar simplemente usando el operador coalescente Null como este:
echo !empty($address['street2']) ?? 'Empty';
fuente
$address['street2']
es una cadena vacía. Lo aceptará y no regresará'Empty'
.isset() != empty()
. Esto solo funcionará si el valor esnull
$address['street2']
no está vacía?echo $address['street2'] ?? 'Empty';
sin embargo, como se mencionó, es el " operador de fusión nula ", por lo que solo prueba nulo y no vacío. Esto es porque ?? Es efectivamente una abreviatura de isset ().Declaración básica de verdadero / falso
Mensaje de bienvenida condicional
Mensaje de elementos condicionales
ref: https://davidwalsh.name/php-ternary-examples
fuente
)
está fuera de lugar. Debería preceder al?
. La declaración completa debería ser$is_admin = ($user['permissions'] == 'admin') ? true : false;
El operador ternario es solo una abreviatura de un 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á:
fuente
Es el operador ternario también conocido como operador Elvis (google it: P) que está buscando.
Devuelve el valor de la variable o por defecto si la variable está vacía.
fuente
Tenga en cuenta que cuando utilice operadores condicionales anidados, es posible que desee utilizar paréntesis para evitar posibles problemas.
Parece que PHP no funciona de la misma manera que al menos Javascript o C #.
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):
$score > 10
? si$age > 10
? no, entonces la corriente$age > 10 ? 'Average' : 'Exceptional'
devuelve 'Excepcional''Exceptional' ? 'Horrible' : 'Average'
que devuelve 'Horrible', ya que 'Excepcional' es verdadDe la documentación: http://php.net/manual/en/language.operators.comparison.php
fuente
Manera rápida y corta:
Aquí hay algunos ejemplos interesantes, con una o más condiciones variadas.
fuente
Mensaje de bienvenida condicional
Taquigrafía PHP anidada
fuente
Puede hacer esto aún más corto reemplazando
echo
con<?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Esto es útil especialmente cuando desea determinar, dentro de una barra de navegación, si la opción del menú debe mostrarse como ya visitada (presionada) o no:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
fuente
Creo que usaste los corchetes de manera incorrecta. Prueba esto:
Creo que debería funcionar, también puedes usar:
fuente
Creo que probablemente no deberías usar el operador ternario en php. Considere el siguiente ejemplo:
¿Cómo crees, qué
$a
variable contendrá? (pista: dos) Y seguirá siendo el mismo incluso si$foo
variable se asignará a 2.Para mejorar las cosas, debe negarse a usar este operador o rodear la parte derecha con llaves de la siguiente manera:
fuente
Ternary Operator es básicamente una abreviatura de la declaración if / else. Podemos utilizar para reducir pocas líneas de código y aumentar la legibilidad.
Tu código me parece más limpio. Pero podemos agregar una forma más limpia de la siguiente manera:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
De otra manera-
$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');
Nota: he añadido corchetes a toda la expresión para que quede más limpia. Solía hacer esto normalmente para aumentar la legibilidad. Con PHP7 podemos usar Null Coalescing Operator / php 7 ?? operador para un mejor enfoque. Pero su requisito no encaja.
fuente
También hay un operador ternario taquigráfico y se ve así:
(expresión1)?: expresión2 devolverá expresión1 si se evalúa como verdadero o expresión2 en caso contrario.
Ejemplo:
volverá
Del manual de PHP
fuente