php - por - parametros opcionales javascript
La mejor forma de darle a una variable un valor predeterminado(simular Perl ||, ||=) (5)
Me encanta hacer este tipo de cosas en Perl: $foo = $bar || $baz
$foo = $bar || $baz
para asignar $baz
a $foo
si $bar
está vacío o indefinido. También tiene $foo ||= $bletch
que solo asignará $bletch
a $foo
si $foo
no está definido o vacío.
El operador ternario en esta situación es tedioso y tedioso. Seguramente hay un método simple y elegante disponible en PHP?
¿O es la única respuesta una función personalizada que usa isset ()?
En PHP 7 finalmente tenemos una manera de hacerlo elegantemente. Se llama el operador coalescente nulo . Puedes usarlo así:
$name = $_GET[''name''] ?? ''john doe'';
Esto es equivalente a
$name = isset($_GET[''name'']) ? $_GET[''name'']:''john doe'';
En PHP anterior a 7. *, uno puede usar?: Para una variable indefinida que tiene errores localmente suprimidos con un @
:
$foo = @$bar ?: $baz;
Gracias por todas las excelentes respuestas!
Para cualquiera que venga aquí por una posible alternativa, aquí hay algunas funciones que ayudan a quitarle el tedio a este tipo de cosas.
function set_if_defined(&$var, $test){
if (isset($test)){
$var = $test;
return true;
} else {
return false;
}
}
function set_unless_defined(&$var, $default_var){
if (! isset($var)){
$var = $default_var;
return true;
} else {
return false;
}
}
function select_defined(){
$l = func_num_args();
$a = func_get_args();
for ($i=0; $i<$l; $i++){
if ($a[$i]) return $a[$i];
}
}
Ejemplos:
// $foo ||= $bar;
set_unless_defined($foo, $bar);
//$foo = $baz || $bletch
$foo = select_defined($baz, $bletch);
Estoy seguro de que se pueden mejorar.
PHP 5.3 tiene un operador taquigráfico ?:
$foo = $bar ?: $baz;
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 lo mismo que en Perl y versiones anteriores de PHP:
$foo = $bar ? $bar : $baz;
Pero PHP no tiene un operador de asignación compuesto para esto (es decir, no es equivalente a Perl''s ||=
).
Además, PHP hará ruido si $bar
no está configurado a menos que desactives los avisos. También hay una diferencia semántica entre isset()
y empty()
. El primero devuelve falso si la variable no existe o está establecida en NULL
. Este último devuelve verdadero si no existe, o está configurado a 0
, ''''
, false
o NULL
.
Una expresión común para mantenerse compatible con las versiones anteriores de PHP es:
$var = $bool or $var = "default";
// If I use it, then only with excessive spaces for clarity.
Esto funciona para valores que pueden evaluarse en contexto booleano. La ventaja aquí es que también le proporciona dicha depuración e_notice si la variable no está definida.