Перегрузка закрытия: возможно ли проверить количество аргументов, которые есть у закрытия PHP, не выполняя его? - PullRequest
5 голосов
/ 07 марта 2012

Что я хочу сделать

Я хочу проверить замыкание (переданное как переменную), чтобы определить, сколько аргументов он ожидает.По сути, я хочу перегрузить замыкание в традиционном смысле, только трактуя его по-другому.

function someMethod(Closure $callback) {
    $varA;
    $varB;
    $varC;
    if($callback->getNumArgs() == 3) {
        $callback($varA, $varB, $varC);
    }
    else {
        $callback($varC, $varA);
    }
}

Если это можно объяснить лучше, пожалуйста, дайте мне знать, чтобы его можно было редактировать.

Справочная информация

В зависимости от того, сколько аргументов принимает закрытие, я скорректирую способ его вызова.Мне нужно сделать это, чтобы сохранить дорогие итерации в цикле.

Обратите внимание:

  • Я использую PHP5.3
  • В качестве напоминания, яне хотят выполнять функцию и поэтому не могут использовать func_num_args

1 Ответ

10 голосов
/ 07 марта 2012

С Отражение :

$ref = new ReflectionFunction(function($foo, $bar) {});
echo $ref->getNumberOfParameters(); // 2
...