Ben*_*ird 6 php closures php-closures php-5.5
我有一个正在传递闭包的函数。我想找出闭包派生自的方法的名称。当我调用print_r时,它输出:
Closure Object
(
[static] => Array
(
[listener] => Event_Subscriber_Calq@vendor_product_created
[container] => Illuminate\Foundation\Application Object
...
Run Code Online (Sandbox Code Playgroud)
我如何访问该侦听器值?我试过 ->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);
Run Code Online (Sandbox Code Playgroud)
这是可怕的。有没有另一种方法可以做到这一点?也许使用反射?
小智 5
我知道这篇文章很旧,但如果有人在寻找信息,你需要使用 ReflectionFunction:
$r = new ReflectionFunction($closure);
var_dump($r, $r->getStaticVariables(), $r->getParameters());
Run Code Online (Sandbox Code Playgroud)
问候,亚历克斯
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |