¿Cómo se crean argumentos opcionales en php?

190

En el manual de PHP, para mostrar la sintaxis de las funciones con parámetros opcionales, utilizan corchetes alrededor de cada conjunto de parámetros opcionales dependientes. Por ejemplo, para la date()función, el manual dice:

string date ( string $format [, int $timestamp = time() ] )

Donde $timestampes un parámetro opcional, y cuando se deja en blanco, su valor predeterminado es el time()valor de retorno de la función.

¿Cómo se crean parámetros opcionales como este al definir una función personalizada en PHP?

gregh
fuente

Respuestas:

253

Al igual que el manual, use un =signo igual ( ) en su definición de los parámetros:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}
Jeff Winkworth
fuente
function dosomething($var1, $var2, $optionalValue = null)Encontré esta mejor opción.
Mohammad Zaid Pathan
52

El valor predeterminado del argumento debe ser una expresión constante. No puede ser una variable o una llamada a función.

Sin embargo, si necesita esta funcionalidad:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

Suponiendo $barque no se espera que sea un booleano, por supuesto.

Ross
fuente
1
sin embargo, esto evaluará si 0 o "falso" se pasó a $ bar.
Tyzoid el
33
Nulo es un valor predeterminado mucho mejor.
Kzqai
3
@DooMMasteR, aquí, quiere decir $bar === false: esta es una acción que debe hacerse cuando se $barha predeterminado false. Esto evitará una acción incorrecta si 0se pasa, por lo que funciona: A MENOS QUE sea necesario un booleano. Como dijo Kzqai, se debe usar una solución más general $bar = null, porque eso también se puede usar cuando los valores de $ bar son booleanos. La prueba luego se convierte en if (is_null($bar))o if ($bar === null).
ToolmakerSteve
22

Algunas notas que también encontré útiles:

  • Mantenga sus valores predeterminados en el lado derecho.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • El valor predeterminado del argumento debe ser una expresión constante. No puede ser una variable o una llamada a función.

gregh
fuente
14

Otorgue al argumento opcional un valor predeterminado.

function date ($format, $timestamp='') {
}
mk.
fuente
10

La función de fecha se definiría de la siguiente manera:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

Por lo general, pondría el valor predeterminado de esta manera:

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

Sin embargo, solo los literales son argumentos predeterminados válidos, razón por la cual utilicé nullcomo argumento predeterminado en el primer ejemplo, no $timestamp = time() , y lo combiné con una comprobación nula. Los literales incluyen matrices ( array()o []), booleanos, números, cadenas y null.

Lars Gyrup Brink Nielsen
fuente
8

Si no sabe cuántos atributos deben procesarse, puede usar el token de lista de argumentos variadic (... ) introducido en PHP 5.6 ( consulte la documentación completa aquí ).

Sintaxis:

function <functionName> ([<type> ]...<$paramName>) {}

Por ejemplo:

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

Como puede ver, este token básicamente convierte todos los parámetros en una matriz, que puede procesar de la forma que desee.

Gergely Lukacsy
fuente