Me encanta hacer este tipo de cosas en Perl: $foo = $bar || $bazasignar $baza $foosi $barestá vacío o indefinido. También tiene $foo ||= $bletchque sólo se asigne $bletcha $foosi $foono 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!nullvalor. 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
$barsi 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
$barno 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,'',falseoNULL.fuente
The first returnslugar deThe seconden 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$boolno 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
issetcasoisset($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