Me encanta hacer este tipo de cosas en Perl: $foo = $bar || $baz
asignar $baz
a $foo
si $bar
está vacío o indefinido. También tiene $foo ||= $bletch
que sólo se asigne $bletch
a $foo
si $foo
no está definido o vaciar.
El operador ternario en esta situación es tedioso y cansado. ¿Seguramente hay un método simple y elegante disponible en PHP?
¿O es la única respuesta una función personalizada que usa isset ()?
php
perl
operators
default-value
Tom Auger
fuente
fuente
//
y//=
existen a partir de Perl v5.10.0. El original||
y||=
prueba de valor lógico, no de definición.Respuestas:
En PHP 7 finalmente tenemos una manera de hacerlo con elegancia. Se llama el operador de fusión nula . Puedes usarlo así:
Esto es equivalente a
fuente
<=>
y bastante precisa para arrancar!null
valor. Por ejemplo, si$_GET['name']
se establece en una cadena vacía, la primera línea devolvería una cadena vacía, pero podríamos devolver "john doe" usando$_GET['name'] ? $_GET['name'] : 'john doe'
.PHP 5.3 tiene un
?:
operador abreviado :Que asigna
$bar
si no es un valor vacío (no sé cómo sería diferente en PHP de Perl), de lo contrario$baz
, y es el mismo que esto en Perl y versiones anteriores de PHP:Pero PHP no tiene un operador de asignación compuesto para esto (es decir, no es equivalente a Perl
||=
).Además, PHP hará ruido si
$bar
no está configurado a menos que desactive los avisos. También hay una diferencia semántica entreisset()
yempty()
. El primero devuelve falso si la variable no existe o se establece enNULL
. Este último responde cierto si éste no existe, o se establece en0
,''
,false
oNULL
.fuente
The first returns
lugar deThe second
en tu penúltima oración.$var = isset($var) ? $var : 'default value';
Dice que en la respuesta ... solo lo señala de nuevo para cualquiera que lo lea. :-D¡Gracias por todas las excelentes respuestas!
Para cualquiera que venga aquí por una posible alternativa, aquí hay algunas funciones que ayudan a eliminar el tedio de este tipo de cosas.
Ejemplos:
Estoy seguro de que se pueden mejorar.
fuente
Un modismo común para seguir siendo compatible con versiones anteriores de PHP es:
Esto funciona para valores que pueden evaluarse en contexto booleano. La ventaja aquí es que también le da dicho debug e_notice si la variable no está definida.
fuente
$bool ? $bool : "default"
si$bool
no está definido?isset($var) ? $var : DEFAULT
. Pero parece que quiere evitarlos de todos modos.En PHP anterior a 7. *, uno puede usar?: Para una variable indefinida que tiene errores localmente suprimidos con un
@
:fuente
este es otro buen formato para el
isset
casoisset($foo) || $foo= $bar;
Otra forma simple y le dará más control, ya que puede agregar más condiciones y asignar a otra variable al mismo tiempo
$foo = (isset($oData['foo']))?$bar['foo']:'default value';
fuente
Una posible solución: defaultFor ()
A menos que tengamos una solución de fábrica (que de hecho es muy molesta), recomendaría el siguiente pequeño ayudante. Hace el trabajo en la mayoría de los casos:
Espero que esto esté cerca de lo que querías lograr. No le dará ningún aviso si lo usa con una variable inexistente, y es bastante conveniente. Seguramente tiene un inconveniente: el valor predeterminado siempre se calcula de antemano, así que no lo use con nada pesado como segundo parámetro, como file_get_contents o algo así. En esos casos, es mejor con isseting.
fuente