Получить строковое представление анонимной функции
Скажем, у меня есть анонимная PHP-функция вроде этого:
<?php
$l = function() { echo "hello world"; };
Можно ли получить строковое представление анонимной функции $l
, то есть строку, содержащую тело функции?
Я пробовал несколько вещей:
-
echo $l;
PHP Catchable fatal error: Объект класса Closure не может быть преобразован в строку
-
var_dump($l);
class Closure # 1 (0) {}
-
echo $l->__toString();
: вызов метода undefined Closure:: __ toString()
-
get_class_methods($l)
возвращает array('bind', 'bindTo')
, поэтому, похоже, не существует недокументированных методов.
-
$r = new ReflectionClass($l);
: getProperties(), getConstants() и getStaticProperties() пустые, также $r->__toString()
не возвращает ничего полезного.
Мне действительно не нужно это в моем коде, я просто подумал, что это может быть полезно для ведения журнала, если что-то пойдет не так. После того, как я не смог найти решение самостоятельно, мне любопытно, возможно ли это вообще.
Ответы
Ответ 1
Ваш единственный "реальный" вариант - использовать фактический парсер PHP для анализа анонимной функции.
Не попадайте в ту же ловушку, что и @argon, думая, что простой substr_count
на основе script может действительно анализировать PHP-код. Он слишком хрупкий и будет срываться даже для самых простых примеров славным образом.
Точка в случае:
$dog2 = ['bark'=>function($foo = '{'){}];
Неустранимая ошибка: нечистое исключение: слишком сложное определение контекста в
https://3v4l.org/CEmqV
Ответ 2
Его оксюморон для доступа к исходному коду анонимного файла. Если вам нужно обратиться к источнику, не создавайте анонимную функцию:
$myfunction='echo "hello world";';
$l = create_function($myfunction);
print highlight_string($myfunction) . " results in....<br />";
$l();
(подсказка, вы можете посмотреть func_get_args())