¿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?

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...
}

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.


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.


14

Otorgue al argumento opcional un valor predeterminado.

function date ($format, $timestamp='') {
}

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.