2009-07-27 7 views
4

Ich bin ziemlich neu in PHP und ich versuche herauszufinden, wie stelle ich einen optionalen Parameter nach dem ersten optionalen Parameter?Wie stelle ich einen optionalen Parameter in PHP nach dem ersten optionalen Parameter

Zum Beispiel habe ich den folgenden Code:

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

Wenn ich die folgenden Anrufe:

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

Ich möchte versuchen, einen Anruf zu tätigen, so dass im letzten Beispiel zeige ich ‚pota 'als Standard-$ veg-Parameter, aber übergeben in $ test' ich bin festgelegt '.

Ich denke, ich kann 0 in $ veg übergeben dann verzweigen Sie es in den Code zu sagen, wenn $ veg = 0 dann verwenden 'pota' aber nur gefragt, ob es eine andere Syntax als ich kann nichts in php.net darüber finden .

Antwort

7

Sie können nicht tun, was Sie wollen mit nur Standard-Parameter. Die Standardwerte gelten nur für fehlende Argumente, und nur die letzten Argumente können fehlen.

Sie können entweder fügen Linien wie

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

und rufen die Funktion als

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

oder verwenden die allgemeinere Technik der Parameter in einem Array mit den Parameternamen als Schlüssel übergeben. Etwas wie

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 

Dies ist ein wenig ausführlicher, aber es ist auch flexibler. Sie können Parameter und Standardwerte hinzufügen, ohne die vorhandenen Anrufer zu ändern.

2

Leider können Sie das in PHP nicht tun.

Sie müssen 0 oder null oder einen anderen Wert übergeben und dann, wenn der Wert 0 oder null ist, ändern Sie es auf den Standardwert.

Here ist eine weitere Frage, die Ihnen mehr Informationen geben sollte.

0

Dies ist die Technik, die ich verwenden:

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 */ 
} 

nun den Standardwert eines optionalen Parameter zu bedienen, einfach NULL übergeben, wie so.

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

In diesem Beispiel wird $veg gleich 'pota'

Der Nachteil dieses Codebeispiel ist, dass Sie zweimal die Standardwerte zu codieren haben. Sie könnten den Standardwert auch einfach auf null in der Parameterdeklaration setzen, so dass Sie den Standardwert nicht zweimal codieren müssen, aber ich möchte ihn zweimal einstellen, weil meine IDE mir Parameterhinweis gibt, der mir sofort die Standardwerte anzeigt in der Funktionssignatur.