首页 > 解决方案 > PHP:如何将数组作为函数参数传播

问题描述

我正在尝试使用__callStatic在我的类中包装对不同静态函数的调用。

当前版本的代码允许我使用具有 0 或 1 个参数的函数来执行此操作:

class test {

  public static function __callStatic($name, $args) {
    if (method_exists(__CLASS__, $name)) {
      echo "it does exist\n";
      return forward_static_call([__CLASS__, $name], $args[0]);
    } else {
      echo "it does not exist\n";
    }
  }

  private static function mfunc($param1, $param2) {
    echo "that's my func \n";
    echo "$param1\n";
    echo "$param2\n";
  }

}
test::notafunc("one", 'two');
test::mfunc("one", "two");

但是它会失败,mfunc因为它有两个参数。调用函数时如何传播不同的参数?

我无法使用新的扩展运算符,因为我被锁定在 PHP 7.2 上。我也不能修改mfunc,因为我在项目中有太多方法可以改变。

标签: phpstatic-methods

解决方案


扩展运算符在 PHP 7.2 中仍然可用,您所指的是稍微不同的东西(它是关于能够将它用作数组的一部分)。所以你可以使用

return forward_static_call([__CLASS__, $name], ...$args);

作为一个更清晰的版本...

return static::{$name}(...$args);

推荐阅读