2009-07-27 6 views
4

Je suis assez nouveau à PHP et j'essaie de comprendre comment puis-je définir un paramètre facultatif après le premier paramètre facultatif?Comment puis-je définir un paramètre facultatif en PHP après le premier paramètre optionnel

Par exemple, j'ai le code suivant:

function testParam($fruit, $veg='pota',$test='default test'){ 
echo '<br>$fruit = '.$fruit; 
echo '<br>$veg = '.$veg; 
echo '<br>Test = '.$test; 
} 

Si je fais les appels suivants:

echo 'with all parama'; 
testParam('apple','carrot','some string'); 
//we get: 
//with all parama 
//$fruit = apple 
//$veg = carrot 
//Test = some string 

echo '<hr> missing veg'; 
testParam('apple','','something'); 
//we get: 
//missing veg 
//$fruit = apple 
//$veg = 
//Test = something 

echo '<hr> This wont work'; 
testParam('apple',,'i am set'); 

Je veux essayer faire un appel afin que dans le dernier exemple que je montre « pota 'comme paramètre $ veg par défaut mais passe dans $ test' je suis défini '. Je suppose que je peux passer 0 dans $ veg, puis branchez-le dans le code pour dire si $ veg = 0, puis utilisez 'pota' mais je me demandais s'il y a une autre syntaxe car je ne trouve rien sur php.net .

Répondre

7

Vous ne pouvez pas faire ce que vous voulez avec seulement des paramètres par défaut. Les valeurs par défaut s'appliquent uniquement aux arguments manquants et seuls les derniers arguments peuvent être manquants.

Vous pouvez ajouter des lignes comme

$vega = $vega ? $vega : 'carrot'; 

et appeler la fonction

testParam('apple',false,'something'); 

ou utiliser la technique plus générale de faire passer les paramètres dans un tableau avec les noms de paramètres comme clés. Quelque chose comme

function testparam($parms=false) { 
    $default_parms = array('fruit'=>'orange', 'vega'=>'peas', 'starch'=>'bread'); 
    $parms = array_merge($default_parms, (array) $parms); 
    echo '<br>fruit = $parms[fruit]'; 
    echo '<br>vega = $parms[vega]'; 
    echo '<br>starch = $parms[starch]'; 
} 

testparm('starch'=>'pancakes'); 
//we get: 
//fruit = orange 
//vega = peas 
//starch = pancakes 

Ceci est un peu plus verbeux mais il est également plus flexible. Vous pouvez ajouter des paramètres et des valeurs par défaut sans modifier les appelants existants.

2

Malheureusement, vous ne pouvez pas le faire en PHP.

Vous devez transmettre 0 ou null ou une autre valeur, puis, si la valeur est 0 ou null, remplacez-la par la valeur par défaut.

Here est une autre question qui devrait vous donner plus d'informations.

0

C'est la technique que je l'utilise:

function testParam($fruit, $veg='pota', $test='default test') { 

    /* Check for nulls */ 
    if (is_null($veg)) { $veg = 'pota'; } 
    if (is_null($test)) { $test = 'default test'; } 

    /* The rest of your code goes here */ 
} 

maintenant d'utiliser la valeur par défaut de tout paramètre optionnel, juste passer NULL comme ceci.

testParam('apple', null, 'some string'); 

Dans cet exemple, $veg égalera 'pota'

L'inconvénient de cet exemple de code est que vous devez coder les valeurs par défaut deux fois. Vous pouvez tout simplement définir la valeur par défaut sur null dans la déclaration des paramètres afin de ne pas avoir à coder deux fois la valeur par défaut, mais j'aime la définir deux fois car mon IDE me donne les paramètres qui me montrent instantanément les valeurs par défaut dans la signature de la fonction.

Questions connexes