根据参数名称为函数分配参数[重复]

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 中的数组也可以用作映射,因此您可以这样使用它。

【讨论】:

问题是我事先不知道那个顺序。用户可以定义自己的功能

以上是关于根据参数名称为函数分配参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

获取python函数中的参数名称列表[重复]

获取python函数中的参数名称列表[重复]

获取将参数传递给jquery中当前函数的函数名称[重复]

具有相同名称但参数和返回类型不同的虚拟函数[重复]

根据函数中的参数数量返回不同的值[重复]

js函数