我有一个正在传递闭包的函数。我想找出派生闭包的方法的名称。当我调用 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);
这太可怕了。还有另一种方法可以做到这一点吗?也许使用反射?