【问题标题】:php: iterate through function arguments by key valuephp:通过键值迭代函数参数
【发布时间】:2012-07-27 19:28:23
【问题描述】:

我有一个php函数function foo($bar1, $bar2, $bar3)

是否有可能动态获取参数名称和值

我找到了func_get_args (http://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"

这可能吗?

【问题讨论】:

  • 简短回答:不。如果要传递键/值对,请使用数组或对象。长(呃)答案:是的,可以使用反射或get_defined_vars() 并去除所有超全局变量 - 但不要
  • ...而且毫无意义。函数参数名称与 PHP 无关(仍然)。

标签: php function parameters


【解决方案1】:

您可以使用get_defined_vars。一个example

【讨论】:

  • 没想到,但这意味着您将获得所有已定义的参数,而不仅仅是传递的实际参数,即您将在结果数组中获得省略参数的默认值。跨度>
  • @soulmerge 只要你给所有参数默认的NULL,这不重要,因为isset()仍然会返回FALSE。如果你想完全剥离它们,你总是可以array_filter()
【解决方案2】:

可以实现,但需要付出很多努力。您需要通过reflection 获取参数名称并将名称映射到通过func_get_args 检索到的值。

如果您真的需要这个,您可以采用另一条更简单的方法,并定义您的函数采用单个parameter object

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

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

【讨论】:

  • 这是一个很好的答案。 @Shatki Singh 的回答是我想要的更多
猜你喜欢
  • 2021-12-15
  • 2017-12-03
  • 2016-10-22
  • 2013-12-27
  • 2018-12-06
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多