PHP-вызов invoke с переменным числом аргументов


Возможно ли, возможно, с помощью какого-то грязного трюка, вызвать класс с помощью волшебного метода __invoke, используя переменное число аргументов?

Я знаю, что в php 5.6 есть вариадика, но моя версия еще не существует...

Для нормального метода класса я мог бы попробовать что-то сделать, используя магический метод __call и функцию call_user_func_array. А как насчет волшебного метода __invoke?

2 2

2 ответа:

Представляется возможным с помощью func_get_args():

Корректировка примера из 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);