Pregunta

A partir de los ejemplos de esta página , tengo el trabajo y no -trabajando siguientes ejemplos de código.

Código de Trabajo using if:

if (!empty($address['street2'])) echo $address['street2'].'<br />';

código no de trabajo utilizando 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 punta de Brian, he encontrado que haciendo eco $test da salida al resultado esperado. Los siguientes trabajos como un encanto!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
¿Fue útil?

Solución

La

(condition) ? /* value to return if condition is true */ 
            : /* value to return if condition is false */ ;

sintaxis no es una "forma abreviada si" operador (el ? se llama el operador condicional) porque no se puede ejecutar código de la misma manera como si lo hizo:

if (condition) {
    /* condition is true, do something like echo */
}
else {
    /* condition is false, do something else */
}

En el ejemplo, se está ejecutando la declaración echo cuando el $address no está vacío. No se puede hacer esto de la misma manera con el operador condicional. Lo que puede hacer sin embargo, es el resultado de echo el operador condicional:

echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];

y esto va a mostrar "la calle está vacía!" si está vacío, de lo contrario, se mostrará la dirección street2.

Otros consejos

PHP 7 +

A partir de PHP 7, esta tarea puede llevarse a cabo simplemente usando el operador coalescente Null como esto:

echo !empty($address['street2']) ?? 'Empty';

Básico Verdadero / Falso Declaración

$is_admin = ($user['permissions'] == 'admin' ? true : false);

Condicional Mensaje de Bienvenida

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

elementos condicionales mensaje

echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';

El operador ternario es sólo una forma rápida para y si / bloque else. Su código de trabajo no tiene una condición más, así que no es adecuado para esto.

El ejemplo siguiente funcionará:

echo empty($address['street2']) ? 'empty' : 'not empty';

Es el operador ternario a.k.a operador de Elvis (google: P) que busca.

echo $address['street2'] ?: 'Empty'; 

Devuelve el valor de la variable o por defecto si la variable está vacía.

Tenga en cuenta que al utilizar operadores condicionales anidadas, es posible que desee utilizar paréntesis para evitar problemas posibles!

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 # retorno "excepcional" en ambos casos.

En el segundo caso, lo que hace PHP es (o al menos eso es lo que entiendo):

  1. es $score > 10? Sí
  2. es $age > 10? no, por lo que los rendimientos actuales $age > 10 ? 'Average' : 'Exceptional' 'excepcional'
  3. a continuación, en lugar de detener toda la declaración y regresar 'excepcional', continúa evaluando la siguiente instrucción
  4. la siguiente afirmación se convierte en 'Exceptional' ? 'Horrible' : 'Average' que devuelve 'horrible', como 'excepcional' es Truthy

A partir de la documentación: http://php.net/manual/en/ language.operators.comparison.php

  

Se recomienda que evite "apilar" las expresiones ternarias. PHP   comportamiento cuando se utiliza más de un operador ternario dentro de un solo   declaración es no evidente.

Condicional Mensaje de Bienvenida

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

Nested PHP taquigrafía

echo 'Your score is:  '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );

Puede hacerlo incluso más corto mediante la sustitución de echo con <?= code ?>

<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>

Esto es útil especialmente cuando se desea determinar, dentro de una barra de navegación, si la opción de menú se debe mostrar como ya se ha visitado (clic) o no:

<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>

Estos son algunos ejemplos interesantes, con uno o más variadas condiciones.

$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 utilizó los soportes de la manera incorrecta. Prueba esto:

$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

Creo que debería funcionar, también se puede usar:

echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

También hay un operador ternario taquigrafía y que se parece a esto:

(expresión 1):? Expresión2 volverá expresión1 si se evalúa como verdadera o expresión2 de lo contrario

.

Ejemplo:

$a = 'Apples';
echo ($a ?: 'Oranges') . ' are great!';

devolverá

Apples are great!
  

A partir de PHP 5.3, es posible dejar de lado la parte media de la   operador ternario. expr1 expresión:? rendimientos expr3 EXPR1 si expr1   evalúa como TRUE, y expr3 lo contrario.

En la Manual de PHP

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