2017-07-26 103 views
0

我需要一個實用的方法將多個參數傳遞給一個函數,該函數在多個腳本上全局使用,以從數據庫轉儲表。PHP多參數函數

它接受多個參數(每個參數都有默認值),它取決於腳本是否需要在函數內激活特定的選項。

例如:

function dump_table($sumtotal=false, $countrows=false, $yadalada=false... etc){ 

的問題是,如果我有10個不同的參數和腳本只需要參數10是真實的我必須調用是這樣的:

dump_table(false,false,false,false...., true) 

所以。有沒有另外一種方法可以輕鬆擴展而不需要函數調用的開銷?

我雖然要使用對象,但afaik它會涉及每個調用創建一個類和實例。

有沒有一種方法,使在PHP中像這樣(的JavaScript般的風格):

dump_table({opt1: true, opt10: true, opt99: true}) 

甚至

$options = { count: true, sumtotals: true }; 
dump_table($options); 
  • 我會使用類似property_exists到函數內部檢查哪些設置...

thx

+0

_if我有10個不同的parameters_這將是錯誤的做法。你的代碼設計會很麻煩。想想單一的責任...... –

+3

一個簡單的關聯數組... ...? – CBroe

+1

我可能會創建一個類來處理它,而不是一個函數。然後,您可以將設置設置爲具有默認值的屬性以及參數的設置器和獲取器。 –

回答

0

你可以用這樣的方法:

function yourFunction(array $parameters = array()) { 
    //here you should define all possible parameters with their defaults 
    $param_1 = true; 
    $param_2 = false; 
    ... 
    $param_10 = true; 
    ... 
    $param_N = 'whatever'; 

    //and now simply extract passed parameters 
    extract($parameters, EXTR_OVERWRITE | EXTR_IF_EXISTS); 
} 

用法:

yourFunction(['param_1' => false, 'param_10' => 'something']); 

extract($parameters, EXTR_OVERWRITE | EXTR_IF_EXISTS)將覆蓋默認定義的變量與那些將通過$parameters陣列傳遞的變量。

+0

omg這是純粹的魔術!奇蹟般有效。謝謝。 –

0

由於@CBroe建議,關聯數組可能是你正在尋找的解決方案:

$options = array(
    'count' => true, 
    'sumtotals' => true, 
    'option3' => false, 
    ... 
    'option9' => false 
    ); 
dump_table($options); 
0

我會採取一些默認選項陣列和1個數組作爲輸入覆蓋:

<?php 

function foo($optionsgiven = array()) 
{ 
    $defaultoptions = ['width' => 10, 'height' => 20, 'weight' => 30]; 

    foreach($defaultoption as $key => $value) { 
    if(isset($optionsgiven[$key])) { 
     $options[$key] = $optionsgiven[$key]; 
    } 
    else { 
     $options[$key] = $value; 
    } 

    } 
} 

// main script 
$x = foo(['width' => 100]); 
?> 
0

這絕對是錯誤的做法。 我建議使用json_encode()和json_decode()對數組進行編碼和解碼。 您可以將所有屬性設置爲數組。

$array = array(
    "sumtotal" = false, 
    "countrows" =false, 
    "yadalada" = false 
); 
dump_table(json_encode($array)); 

,你必須該數組json_decode($array, true);解碼功能裏面,然後你可以建立你的if else statments