2013-03-14 55 views
0

對傳遞給函數的所有參數應用php函數(如trim())的好方法,同時保留它們以便進一步處理?假設我們要修剪傳遞給郵件功能的所有參數:將php函數應用於所有函數參數

function my_function($a, $b, $c = NULL, $d, $e = NULL, $f = NULL){ 
    $a = trim($a); 
    $b = trim($b); 
    $c = trim($c); 
    $d = trim($d); 
    $e = trim($e); 
    $f = trim($f); 

// !!! i'd like something other than n lines of trim()... 

// do further functioning on original *now trimmed* arguments... 

my_function($to,$subject,$body,$from,$cc,$bcc); 

func_get_args()等數組類型功能是不理想的,因爲我們的修剪參數是採取進一步行動無法與最初定義。我們是否需要使用某種數組然後重新組合原始參數?

+0

可能使用get_defined_vars() – 2013-03-14 07:40:35

回答

2

的一個好方法是隻需在代碼中進行即可。對於這個「問題」的任何解決方案都是愚蠢的,因爲最後你的對所有的參數調用trim。一個愚蠢的,但簡單地說,這樣做將是這樣:

function my_function($a, $b, $c = NULL, $d, $e = NULL, $f = NULL){ 
    foreach (range('a', 'f') as $v) { 
     $$v = trim($$v); 
    } 
    // ... 
} 
+0

我的解決方案,因爲它優雅地處理NULL! – Ragamffn 2013-03-14 19:19:10

1

func_get_args()和array_walk()也許?

function my_function($a, $b, $c = NULL, $d, $e = NULL, $f = NULL) 
    $argArray = func_get_args(); 
    array_walk($argArray,'trim'); 
    list($a, $b, $c, $d, $e, $f) $argArray; 
    ... 
} 
+0

+1的'list'想法來解決。謝謝 – 2013-03-14 07:59:41

3

下應該做的伎倆:

$args = array_map('trim', func_get_args()); 

編輯

能做得更好(借用過馬克·貝克)

list($a, $b, $c, $d, $e, $f) = array_map('trim', func_get_args()); 
+0

是的,但我們原來的論點仍然沒有修正。我們可以'列出'重新組合原始的*現在修剪*參數,但潛在的NULL值保持未定義並拋出錯誤... – Ragamffn 2013-03-14 07:58:38