PHP - 使用可变数量的参数调用 __invoke

PHP - call __invoke with a variable number of arguments

是否有可能通过某种肮脏的技巧,使用可变数量的参数通过 __invoke 魔术方法调用 class?

我知道 php 5.6 中有可变参数,但我的版本还没有...

对于正常的 class 方法,我可以尝试使用魔术方法 __callcall_user_func_array 函数来做一些事情。 __invoke魔术方法呢?

似乎可以使用 func_get_args():

正在调整example from the docs

<?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);
}