2013-12-20 37 views
2

我有喜歡PHP的如何通過傳遞一些參數功能

function myFunction($name, $id=1,$salary=1000) { 
     echo $id; 
     echo $name; 
     echo $salary 
    } 

已知數量的參數的函數時,我調用這個函數

myFunction("name"); 

它顯示

  • 1名稱1000

但是我怎樣才能忽略這個函數的id參數,並且只想給第一個和第三個參數? 像

myfunction("name",ignore 2nd parameter and give value of 3rd parameter) 

,以便它應該顯示

  • 名1給出的薪水
+5

你不能 - PHP如何知道它是你想跳過的第二個,而不是第三個?如果你想這樣做,我會建議調整函數,使其接受一個命名參數的關聯數組,所以你可以傳入你想要的。 – andrewsi

+0

http://stackoverflow.com/questions/1620737/using-default-value-when-calling-a-function這正是你需要的 – 2013-12-20 13:23:53

+0

你也可以探索這個http://stackoverflow.com/questions/9166914/ php-using-default-arguments-in-a-function – 2013-12-20 13:26:44

回答

3

你不能用本地代碼。有兩種解決方案:

  • 取這樣的參數數組:

    function myFunction($params) { 
        if (!isset($params['name'])) throw new Exception(); 
        if (!isset($params['id'])) $params['id'] = 1; 
        if (!isset($params['salary'])) $params['salary'] = 1000; 
        echo $params['id']; 
        echo $params['name']; 
        echo $params['salary']; 
    } 
    
  • 創建一個新的功能myFunction2

    function myFunction2($name, $salary) { 
        return myFunction($name, 1, $salary); 
    } 
    
+0

耶,謝謝,它喚醒:) – baig

0

可變參數的功能?

function myFunction() { 
    switch (func_num_args()) { 
    case 2: 
     $name = func_get_arg(0); 
     $salary = func_get_arg(1); 
     break; 
    case 3: 
     $name = func_get_arg(0); 
     $id = func_get_arg(1); 
     $salary = func_get_arg(2); 
     break; 
    default: 
     throw new Exception(); 
    } 
} 
myFunction('name', 1000); 
myFunction('name', 1, 2000); 

如果您想爲這些設置默認值,那麼您應該在switch語句中這樣做。

我不主張這是一個很好的解決方案,但它是一個解決方案。

+0

爲什麼downvote。這是最好的方法 – DanFromGermany

0

第二個功能將完成這項工作。

function second($name,$another){ 
    first($name ,1,$another); 
}