Я хочу получить статический метод из класса и скопировать его в переменную.Преобразование статического метода в лямбда в PHP
Это нерабочим пример, иллюстрирующий мой вопрос:
class foo
{
public static function bar($argument){ return 2*$argument; }
}
$class = new ReflectionClass('foo');
// here is no ReflectionMethod::getClosure() method in reality
$lambda = $class->getMethod('bar')->getClosure();
echo $lambda(3);
Так что мой вопрос: возможно ли это каким-либо обычным способом? На данный момент я нахожу только один способ. Я могу проанализировать исходный файл, получить из него источник метода и преобразовать его с помощью create_function(), но он слишком извращен.
Я не уверен, что вы можете с помощью отражения: Я думаю, что вы должны были бы использовать PHP токенизатором –
Я не понимаю цели, но как насчет создания функции лямбды в качестве оболочки для 'Foo :: бар() '? – arkascha
Подумав некоторое время, я смею сказать, что невозможно превратить метод класса в лямбда-функцию. Это не имеет смысла, если бы это было возможно (или есть, мы говорим о php со всеми его проблемами здесь ...), тогда все может действительно сломаться. Причина в том, что метод класса может не быть независимым: он может относиться к другим методам или членам класса. Без этих присутствий функция lamba определенно не имела бы никакого смысла ... – arkascha