我有一个函数,它接受一个闭包。我想知道这个闭包来自哪个方法。当我调用print_r时,它输出:
Closure Object
(
[static] => Array
(
[listener] => Event_Subscriber_Calq@vendor_product_created
[container] => Illuminate\Foundation\Application Object
...
如何访问那个监听器的值?我尝试使用 ->static、::$static、getStatic(),但无法想到任何方法来获取该值。
目前,我的计划是使用输出缓冲来捕获var_dump的输出。我不能使用print_r,因为闭包包含对自身引用的对象的引用,而print_r处理递归需要很长时间。我也不能使用var_export,因为它在输出中不包括我想要的值。所以,这是我的解决方案:
ob_start();
var_dump($closure);
$data = ob_get_clean();
$data = preg_replace('#^([^\n]*\n){4}#', '', $data);
$data = preg_replace('#\n.*#', '', $data);
$data = preg_replace('#.*string.[0-9]+. "(.*)".*#', '\1', $data);
list($class, $method) = explode('@', $data);
这很糟糕。有没有其他方法可以解决这个问题?也许可以使用反射?