2012-07-27 218 views
2

通過函數的參數迭代我有一個PHP函數function foo($bar1, $bar2, $bar3)PHP:通過鍵值

是否有可能獲得的參數名稱和動態值

我發現func_get_argshttp://php.net/manual/de/function.func-get-args.php),但將返回類似

0 => "valueOf$bar1", 1=> "valueOf$bar2", 2 => "valueOf$bar3" 

我想的卻是這樣的:

"$bar1" => "valueOf$bar1", "$bar2"=> "valueOf$bar2", "$bar3" => "valueOf$bar3" 

這可能嗎?

+2

簡短的回答:沒有。如果您想傳遞鍵/值對,請使用數組或對象。長(呃)答案:是的,它可以使用反射或'get_defined_vars()'和剝離所有超全球 - 但**不**。 – DaveRandom 2012-07-27 10:13:53

+0

......並且毫無意義。函數參數名稱與PHP(仍然)無關。 – Narf 2012-07-27 10:20:37

回答

4

您可以使用get_defined_vars。一個example

+0

沒有想到這一點,但這意味着你得到所有定義的參數,而不僅僅是傳遞的實際參數,即你將在默認值中省略參數。產生陣列。 – soulmerge 2012-07-27 10:21:38

+0

@soulmerge只要給所有參數默認爲'NULL',這應該不會影響,因爲'isset()'仍然會返回'FALSE'。如果你想完全去除它們,你總是可以'array_filter()'。 – DaveRandom 2012-07-27 10:28:09

1

可以被實現,但涉及很多努力。您需要通過reflection獲取參數名稱,並將名稱映射到通過func_get_args檢索的值。

如果你真的需要這個,你可以採取另一種更簡單的途徑,並定義你的函數只有一個parameter object

class MyParamObj { 
    public $foo; 
    public $bar; 
} 

function myfunc(MyParamObj $args) { 
    # ... 
} 
+0

這是一個很好的解決方案。雖然 – Horen 2012-07-27 11:57:02