PHP - 使用可变数量的参数调用 __invoke
PHP - call __invoke with a variable number of arguments
是否有可能通过某种肮脏的技巧,使用可变数量的参数通过 __invoke
魔术方法调用 class?
我知道 php 5.6 中有可变参数,但我的版本还没有...
对于正常的 class 方法,我可以尝试使用魔术方法 __call
和 call_user_func_array
函数来做一些事情。 __invoke
魔术方法呢?
似乎可以使用 func_get_args()
:
<?php
class CallableClass
{
public function __invoke()
{
var_dump(func_get_args());
}
}
$obj = new CallableClass;
$obj(5, 6, 7, 8); // vary arguments to meet your needs
PHP 似乎不介意将参数添加到 invoke 方法。
所以这也行得通:
<?php
class Invoked
{
public function __invoke($value, $key)
{
var_dump($value, $key);
}
}
$numbers = range(0, 10);
array_walk($numbers, new Invoked);
您可以使用休息运算符:
public function __invoke(...$args)
{
print_r($args);
}
是否有可能通过某种肮脏的技巧,使用可变数量的参数通过 __invoke
魔术方法调用 class?
我知道 php 5.6 中有可变参数,但我的版本还没有...
对于正常的 class 方法,我可以尝试使用魔术方法 __call
和 call_user_func_array
函数来做一些事情。 __invoke
魔术方法呢?
似乎可以使用 func_get_args()
:
<?php
class CallableClass
{
public function __invoke()
{
var_dump(func_get_args());
}
}
$obj = new CallableClass;
$obj(5, 6, 7, 8); // vary arguments to meet your needs
PHP 似乎不介意将参数添加到 invoke 方法。
所以这也行得通:
<?php
class Invoked
{
public function __invoke($value, $key)
{
var_dump($value, $key);
}
}
$numbers = range(0, 10);
array_walk($numbers, new Invoked);
您可以使用休息运算符:
public function __invoke(...$args)
{
print_r($args);
}