2015-11-29 157 views
1

我有php function多參數。我想只設置最後一個參數來調用這個function。簡單的方法是設置其他參數爲空。但它不好。調用PHP函數

有沒有辦法通過設置最後一個參數來調用這個function而不設置其他參數?

見這個例子:

function MyFunction($A, $B, $C, $D, $E, $F) 
{ 
    //// Do something 
} 

//// Simple way 
MyFunction("", "", "", "", "", "Value"); 

//// My example 
MyFunction(argument6: "Value") 
+0

設定的默認值 'MyFunction的($ A = NULL,$ B = NULL,...)'等等 –

回答

1

我的建議是使用數組,而不是使用參數的數量,例如你的函數調用應該是這樣的。

$params[6] = 'value'; 
MyFunction($params); 

對於確定第六個參數已成立

function MyFunction($params){ 
If (isset($params[6])) // parameter six has value 

} 

我希望這將是一個替代方法

1

在這個問題的背景下,這個工程。 您可以使用每個數組鍵作爲變量,如$ A,$ B,... 但是,您必須小心,不要使用之前設置的舊值發佈$ args。

<?php 

$args = array('A'=>'', 'B'=>'', 'C'=>'', 'D'=>'', 'E'=>'', 'F'=>''); 
function MyFunction($args) 
{ 
    foreach($args as $key => $value) 
     $$key = $value; 

    echo $F;  
    //// Do something 
} 

$args['F'] = 'Value'; 
Myfunction($args); 
+0

它是不安全的這種方式來設置局部變量。想象一下,如果有像'args','key','value'等一樣傳遞的鍵,像其他任何局部變量那樣會發生什麼。外部代碼不應該假設被調用函數的任何細節 –

+0

@MaxZuber你是絕對正確的。我試圖說明這不是一種安全的方式,但有時候人們爲了學習目的必須看到一些工作。這是我的主要目的:) – sinaza

0

使用數組作爲參數,並在函數定義中使用類型提示和空數組作爲默認值。在函數內部提供默認值並通過用戶值覆蓋它們。

function MyFunction(array $args = []) { 
    // Provide default values 
    $defaults = [ 
    'A' => 0, 
    'B' => 0, 
    'C' => 0, 
    'D' => 0, 
    'E' => 0, 
    'F' => 0 
    ]; 
    foreach ($defaults as $key => $val) { 
    if (!array_key_exists($key, $args)) { 
     $args[$key] = $val; 
    } 
    } 

    echo '<pre>'; 
    print_r($args); 
    echo '</pre>'; 
} 

MyFunction(); 
MyFunction(['F' => 77]);