PHP: 如何将数组作为函数参数展开
PHP: How to spread an array as function parameters
我正在尝试使用 __callStatic
将对不同静态函数的调用包装在我的 class 中。
当前版本的代码允许我使用具有 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
它会失败,因为它有两个参数。
调用函数时如何传播不同的参数?
我无法使用新的 spread operator,因为我被锁定在 PHP 7.2。
我也不能修改mfunc
,因为我在项目中有太多方法要更改。
扩展运算符在 PHP 7.2 中仍然可用,您指的是稍微不同的东西(它是关于能够将它用作数组的一部分)。所以你可以使用
return forward_static_call([__CLASS__, $name], ...$args);
作为更清晰的版本...
return static::{$name}(...$args);
我正在尝试使用 __callStatic
将对不同静态函数的调用包装在我的 class 中。
当前版本的代码允许我使用具有 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
它会失败,因为它有两个参数。
调用函数时如何传播不同的参数?
我无法使用新的 spread operator,因为我被锁定在 PHP 7.2。
我也不能修改mfunc
,因为我在项目中有太多方法要更改。
扩展运算符在 PHP 7.2 中仍然可用,您指的是稍微不同的东西(它是关于能够将它用作数组的一部分)。所以你可以使用
return forward_static_call([__CLASS__, $name], ...$args);
作为更清晰的版本...
return static::{$name}(...$args);