Comment créez-vous des arguments optionnels en php?

190

Dans le manuel PHP, pour montrer la syntaxe des fonctions avec des paramètres optionnels, ils utilisent des crochets autour de chaque ensemble de paramètres optionnels dépendants. Par exemple, pour la date()fonction, le manuel lit:

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

$timestampest un paramètre facultatif, et lorsqu'il est laissé vide, il prend par défaut la time()valeur de retour de la fonction.

Comment créer des paramètres optionnels comme celui-ci lors de la définition d'une fonction personnalisée en PHP?

gregh
la source

Réponses:

253

Tout comme le manuel, utilisez un =signe égal ( ) dans votre définition des paramètres:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}
Jeff Winkworth
la source
function dosomething($var1, $var2, $optionalValue = null)J'ai trouvé cette meilleure option.
Mohammad Zaid Pathan
52

La valeur par défaut de l'argument doit être une expression constante. Cela ne peut pas être une variable ou un appel de fonction.

Si vous avez cependant besoin de cette fonctionnalité:

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

En supposant que ce $barn'est pas censé être un booléen, bien sûr.

Ross
la source
1
cependant, ceci évaluera si 0 ou "faux" a été passé à $ bar.
Tyzoid
33
Null est une bien meilleure valeur par défaut.
Kzqai
3
@DooMMasteR, ici, vous voulez dire $bar === false- c'est une action qui doit être effectuée lorsque la valeur par $bardéfaut est false. Cela évitera une action incorrecte si elle 0est transmise, donc cela fonctionne - SAUF un booléen est nécessaire. Comme l'a dit Kzqai, une solution plus générale consiste à utiliser $bar = null, car cela peut également être utilisé lorsque les valeurs de $ bar sont booléennes. Le test devient alors if (is_null($bar))ou if ($bar === null).
ToolmakerSteve
22

Quelques notes que j'ai également trouvées utiles:

  • Gardez vos valeurs par défaut sur le côté droit.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • La valeur par défaut de l'argument doit être une expression constante. Cela ne peut pas être une variable ou un appel de fonction.

gregh
la source
14

Donnez à l'argument optionnel une valeur par défaut.

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

La fonction de date serait définie quelque chose comme ceci:

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

    // Format the timestamp according to $format
}

Habituellement, vous mettriez la valeur par défaut comme ceci:

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

Cependant, seuls les littéraux sont des arguments par défaut valides, c'est pourquoi j'ai utilisé nullcomme argument par défaut dans le premier exemple, non $timestamp = time() , et l' ai combiné avec une vérification nulle. Les littéraux incluent les tableaux ( array()ou []), les booléens, les nombres, les chaînes et null.

Lars Gyrup Brink Nielsen
la source
8

Si vous ne savez pas combien d'attributs doivent être traités, vous pouvez utiliser la liste d'arguments variadique token ( ...) introduite dans PHP 5.6 ( voir la documentation complète ici ).

Syntaxe:

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

Par exemple:

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');

Comme vous pouvez le voir, ce jeton transforme fondamentalement tous les paramètres en un tableau, que vous pouvez traiter comme vous le souhaitez.

Gergely Lukacsy
la source