2008-08-29 12 views
127

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 función de date(), el manual dice lo siguiente:¿Cómo se crean argumentos opcionales en php?

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

Dónde $timestamp es un parámetro opcional, y cuando se deja por defecto en blanco para el valor devuelto por la función time().

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

Respuesta

180

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

function dosomething($var1, $var2, $var3 = 'somevalue'){ 
    // Rest of function here... 
} 
12

Dale el argumento opcional un valor predeterminado.

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

Algunas notas que también he encontrado útil:

  • mantener su valores predeterminados en el lado derecho.

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

35

El valor por defecto del argumento debe ser una expresión constante. No puede ser una variable o una llamada de función.

Si necesita esta funcionalidad, sin embargo:

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

Suponiendo $bar no se espera que sea un valor lógico, por supuesto.

+1

Sin embargo, esto evaluará si se pasó 0 o "falso" a $ bar. – Tyzoid

+24

nulo es un valor predeterminado mucho mejor. – Kzqai

+1

no debería $ bar! == false también funciona? – DooMMasteR

4

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

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

    // Format the timestamp according to $format 
} 

Por lo general, se pondría el valor por defecto de esta manera:

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

Sin embargo, sólo literales son argumentos válidos predeterminados, por eso usé null como 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.

5

Si no sabe cuántos atributos deben procesarse, puede usar el token de la lista de argumentos varódicos (...) introducido en PHP 5.6 (see full documentation here).

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 se puede ver, esta señal se convierte básicamente todos los parámetros a una matriz, que se puede procesar en cualquier forma que desee.

Cuestiones relacionadas