2012-07-27 54 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