recibir por parametros opcionales lista introduccion funcion defecto conclusion comandos php perl operators default-value

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.