ternarios - Usando el Operador Ternario sin la declaración Else PHP
operadores ternarios ejemplo (3)
Solo NULL
en NULL
esta manera:
$new_variable = (isset($testing) ? $testing : NULL);
La variable you devolvería false con una comprobación isset()
.
Puedes leer más sobre NULL
en el manual.
Y una cita de allí:
El valor especial NULL representa una variable sin valor . NULL es el único valor posible de tipo nulo.
Una variable se considera null
si:
- Se le ha asignado la constante NULL .
- todavía no se ha establecido en ningún valor .
- ha sido desarmado ().
¿Se puede usar el Operador Ternario en PHP sin la declaración de cierre ''else''? Lo he intentado y está devolviendo errores. La búsqueda en Google no está dando nada, así que creo que la respuesta es probablemente no. Sólo quería volver a comprobar aquí. Por ejemplo:
if ( isset($testing) {
$new_variable = $testing;
}
Solo establecerá $ new_variable si existe $ testing. Ahora puedo hacer
$new_variable = (isset($testing) ? $testing : "");
pero eso devuelve una variable vacía para $ new_variable si $ testing no está establecido. No quiero una variable vacía si no está establecida, quiero que no se cree la variable $ new_variable.
Lo intenté
$new_variable = (isset($testing) ? $testing);
y devolvió errores. Yo tambien lo intenté
$new_variable = (isset($testing) ? $testing : );
y también devolvió errores. ¿Hay alguna forma de usar el Operador Ternario sin la otra declaración adjunta, o me quedo atascado escribiendo a mano?
EDITAR: Siguiendo el consejo de Rizier123, intenté establecer la parte ''else'' de la ecuación en NULL, pero aún así termina agregando una clave a una matriz. El valor no está allí, pero la clave es, lo que confunde mis planes. Por favor, permítame explicar más.
El código tomará un grupo de variables $ _POST de un formulario y las utilizará para los parámetros en un stdClass que luego se usará para las llamadas a los métodos API. Algunas de las variables de formulario no existirán, ya que todas se aplican a la misma variable para la llamada a la API, pero el usuario solo puede seleccionar una. Como ejemplo, tal vez puede seleccionar 3 elementos, el elemento que seleccione se pasa a la clase std y los otros 2 no existen.
Intenté esto:
$yes_this_test = "IDK";
$setforsure = "for sure";
$list = new stdClass;
$list->DefinitelySet = $setforsure;
$list->MaybeSet = (isset($yes_this_test) ? $yes_this_test : NULL);
$list->MaybeSet = (isset($testing) ? $testing : NULL);
print_r($list);
Pero, obviamente, MaybeSet se establece en NULL porque (isset ($ testing) viene después de (isset ($ yes_this_test) y devuelve
stdClass Object ( [DefinitelySet] => for sure [MaybeSet] => )
No sabré en qué orden ingresan las variables $ _POST, así que realmente no puedo estructurarlo de tal manera que me asegure de que la lista se procese en el orden correcto.
Ahora sé que puedo hacer algo como
if ( isset($yes_this_test ) {
$list->MaybeSet = $yes_this_test;
}
elseif ( isset($testing) ) {
$list->MaybeSet = $testing;
}
Pero esperaba que hubiera una taquigrafía para este tipo de lógica, ya que tengo que escribir docenas de estos. ¿Hay un operador similar al operador ternario utilizado para las declaraciones if / elseif?
También puedes hacer esto (forma corta):
isset($testing) ? $new_variable = $testing : NULL;
Desde PHP 5.3 puedes hacer esto:
!isset($testing) ?: $new_variable = $testing;
Como puede ver, solo usa la parte si la condición es falsa , por lo que tiene que negar la expresión de isset
.
ACTUALIZAR
Desde PHP 7.0 puedes hacer esto:
$new_variable = $testing ?? null;
Como puede ver, devuelve su primer operando si existe y no es NULL; De lo contrario, devuelve su segundo operando.