web-dev-qa-db-fra.com

PHP Valeurs par défaut des paramètres de fonction, comment «passer la valeur par défaut» pour les paramètres «pas les derniers»?

La plupart d'entre nous connaissent la syntaxe suivante:

function funcName($param='value'){
    echo $param;
}
funcName();

Result: "value"

Nous nous demandions comment passer les valeurs par défaut pour le paramètre "pas le dernier"? Je sais que cette terminologie est loin, mais un exemple simple serait:

function funcName($param1='value1',$param2='value2'){
    echo $param1."\n";
    echo $param2."\n";
}

Comment accomplissons-nous ce qui suit:

funcName(---default value of param1---,'non default');

Result:

value1
not default

J'espère que cela a du sens, nous voulons essentiellement supposer des valeurs par défaut pour les paramètres qui ne sont pas les derniers.

Merci.

46
anonymous-one

PHP ne prend pas en charge ce que vous essayez de faire. La solution habituelle à ce problème consiste à passer un tableau d'arguments:

function funcName($params = array())
{
    $defaults = array( // the defaults will be overidden if set in $params
        'value1' => '1',
        'value2' => '2',
    );

    $params = array_merge($defaults, $params);

    echo $params['value1'] . ', ' . $params['value2'];
}

Exemple d'utilisation:

funcName(array('value1' => 'one'));                    // outputs: one, 2
funcName(array('value2' => 'two'));                    // outputs: 1, two
funcName(array('value1' => '1st', 'value2' => '2nd')); // outputs: 1st, 2nd
funcName();                                            // outputs: 1, 2

En utilisant cela, tous les arguments sont facultatifs. En passant un tableau d'arguments, tout ce qui se trouve dans le tableau remplacera les valeurs par défaut. Cela est possible grâce à l'utilisation de array_merge() qui fusionne deux tableaux, remplaçant le premier tableau par tous les éléments en double dans le deuxième tableau.

53
MrCode

Malheureusement, ce n'est pas possible. Pour contourner cela, je suggère d'ajouter la ligne suivante à votre fonction:

$param1 = (is_null ($param1) ? 'value1' : $param1);

Vous pouvez alors l'appeler comme ceci:

funcName (null, 'non default');

Result:

value1
non default
12
Jeroen

La solution simple de votre problème est, au lieu d'utiliser:

funcName(---default value of param1---,'non default');

Utilisez la syntaxe suivante:

funcName('non default',---default value of param1---);

Exemple:

function setHeight2($maxheight,$minheight = 50) {
    echo "The MAX height is : $maxheight <br>";
    echo "The MIN height is : $minheight <br>";
}

setHeight2(350,250);
setHeight2(350); // will use the default value of 50
1
Rohit Pavaskar