【问题标题】:PHP: Array to variable function parameter valuesPHP:数组到变量函数参数值
【发布时间】:2010-12-20 02:38:16
【问题描述】:

我有一个可变长度数组,我需要将其转置为函数的参数列表。

我希望有一种简洁的方法来做到这一点 - 但我看不出如何。

我正在编写的代码将调用一个类中的一个方法——但我不知道该方法的名称,也不知道它有多少个参数。

我试过了 - 但它不起作用:

$params = array(1 => "test", 2 => "test2", 3 => "test3");
ClassName::$func_name(implode($params, ","));

上面将所有值集中到函数的第一个参数中。而它应该使用 3 个参数值(test、test2、test3)调用函数。

我需要的是这个:

ClassName::$func_name("test", "test2", "test3");

任何想法如何巧妙地做到这一点?

【问题讨论】:

    标签: php arrays function params


    【解决方案1】:

    是的,使用call_user_func_array()

    call_user_func_array('function_name', $parameters_array);
    

    您也可以使用它来调用类中的方法:

    class A {
      public function doStuff($a, $b) {
        echo "[$a,$b]\n";
      }
    }
    
    $a = new A;
    call_user_func_array(array($a, 'doStuff'), array(23, 34));
    

    【讨论】:

    • Cletus - 谢谢!!这是一种享受。我希望我拔掉的所有头发都能长回来:-)
    • 同时使用Python:function_name(*parameters_array)...我真的爱上了PHP。
    【解决方案2】:

    你可以使用eval:

      eval("$func_name(" . implode($params, ",") . ");");
    

    虽然您可能需要做一些 lambda 技巧来引用和/或转义参数:

      $quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params);
    

    【讨论】:

    • 是的 - 谢谢弗兰克!我尝试了这个,但被数组值的引用所困扰。有点乱……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多