Получить строковое представление анонимной функции

Скажем, у меня есть анонимная 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())