根据参数名称为函数分配参数[重复]
Posted
技术标签:
【中文标题】根据参数名称为函数分配参数[重复]【英文标题】:Assign parameters to function according to parameter names [duplicate] 【发布时间】:2012-12-12 16:41:12 【问题描述】:可能重复:php Optional Parameters - specify parameter value by name?
我有一个 assoc 数组,其中包含对我来说是参数的列表。这是一个例子:
array(
'param1' => 'value1',
'param4' => 'value4',
'param3' => 'value3',
'param2' => 'value2',
);
请注意,它们可能未排序。现在,有没有办法可以进行调用(静态或从实例,使用call_user_func_array
或类似方法)并将每个值正确传递给每个参数?可以肯定的是,我想使用该参数数组调用的示例函数是这样的:
exampleFunction($param1, $param2, $param3, $param4)
...
PS:反射很棒,但我担心执行时间(至少在 Java 中使用反射时会增加很多)。如果您知道任何其他方式来做到这一点,那就太棒了。
【问题讨论】:
为什么不传递一个数组作为参数? 使用反射将是唯一的选择,但似乎是一个非常疯狂的解决方案。您应该对代码进行结构化,这样就不必以特定顺序传递参数,该顺序只能通过内省来确定。 我试图避免这种情况(这是我的第一种方法)。这实际上不适合我,我正在做一个图书馆,问题之一是客户希望它尽可能简单 您是否运行过任何指标表明 PHP 中的反射无法为您提供所需的性能?你在这里提到的问题听起来有点理论。 @hakre Omg,完全重复,不,我没有运行任何指标,这完全是理论上的,但我警告过这一点(引用自己的话:我担心执行次(至少在 Java 中在使用反射时往往会增加很多)) 【参考方案1】:为避免此问题,您应该传递 array
作为参数,如下所示。
这样您就不会按特定顺序堆叠,并且可以为不在数组中的参数设置默认值。
$data = array(
'param1' => 'value1',
'param4' => 'value4',
'param3' => 'value3',
'param2' => 'value2',
);
exampleFunction($data);
function exampleFunction($params= array())
$defaults = array(
'param1' => '1',
'param4' => '2',
'param3' => '3',
'param2' => '4',
);
$params += $defaults;
您可以通过以下方式访问数组元素。
$data['param1'], $data['param2'], $data['param3'], ...
【讨论】:
【参考方案2】:如果您只是尝试使用参数中的值调用函数,那么我认为这就是您想要做的:
exampleFunction($params['param1'], $params['param2'], $params['param3'], $params['param4']);
PHP 中的数组也可以用作映射,因此您可以这样使用它。
【讨论】:
问题是我事先不知道那个顺序。用户可以定义自己的功能以上是关于根据参数名称为函数分配参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章