2011-03-22 83 views
0

我有這個問題,但我不知道如何將它命名,例如,我有這個功能,跳過一個函數參數?

function test($param1,$param2 = false,$param3 = false) 
{ 

    if($param2 == true) 
    { 
     return '2'; 
    } 

    elseif($param3 == true) 
    { 
     return '3'; 
    } 

    else 
    { 
     return '1'; 
    } 
} 

爲了回報「3」,我要喚起我的功能就是這樣,

$test = test('test',false,true); 

我想問我是否可以跳過第二個參數並通過喚起這樣的函數返回'3'?

$test = test('test',$param3 = true); 

還是其他的方法呢?

回答

4

您可以假冒命名的參數,在這裏看到這樣:

Emulating named function parameters in PHP, good or bad idea?

這裏是你應該尋找正確答案的樣本此頁上:

function myFunc (array $args) { 
    $default = array(
     "name" => "John Doe", 
     "age" => "30" 
    ); 
    // overwrite all the defaults with the arguments 
    $args = array_merge($defaults, $args); 
    // you *could* extract($args) here if you want 

    echo "Name: " . $args['name'] . ", Age: " . $args['age']; 
} 

myFunc(array("age" => 25)); // "Name: John Doe, Age: 25" 
+0

感謝。我認爲它不應該是'$ defaults'的's'。該行應該是 - '$ args = array_merge($ default,$ args);' – laukok 2011-03-22 16:57:46

0

你可以爲您的參數設置如下默認值:

function someFunction($varA, $varB=false, $varC=false) 
{ 
    if($varB==true) 
    { 
     return 'b'; 
    } 
} 

Whe ñ您稱呼功能,您可以做someFunction(true)someFunction(true, true)someFunction(true, true, true)。唯一的問題是你不能申報A和C而不申報B。

編輯: 錯過第一行。您也可以將您的變量作爲數組傳遞。

0

不,沒有辦法做到這一點。如果要將$ param3傳遞給該函數,則必須傳遞函數簽名中$ param3之前的所有參數。

0

我想問我是否可以跳過第二個參數並通過喚起這樣的函數返回'3'?

不,你不能。 「跳過」參數的唯一方法是發送類似NULL的東西。但是,然後你的功能需要看起來像:

function foo($a, $skip_me = NULL, $b = 1); 
{ 
    if ($skip_me === NULL) $skip_me = false; // set the default value like this 
} 

foo(1, NULL, 2); 

另一種選擇是發送一個數組,並使函數採取單個參數。如果你有很多可選的參數,這會很有用。

1

你可以傳遞參數數組:

$params = array(
    'param1' => 'test', 
    'param3' => true 
); 

$result = myFunction($params); 

function myFunction($params) { 
    if (isset($params['param3']) && $params['param3']) { 
     return 3; 
    } 
}