您可以从PHP获得的是有限的,使用反射您只需获取函数的参数签名以及源代码文件的开始和结束行.我曾经写过一篇博客文章:

http://www.metashock.de/2013/05/dump-source-code-of-closure-in-php/ ……

它引导我使用反射以下代码:

function closure_dump(Closure $c) {

$str = 'function (';

$r = new ReflectionFunction($c);

$params = array();

foreach($r->getParameters() as $p) {

$s = '';

if($p->isArray()) {

$s .= 'array ';

} else if($p->getClass()) {

$s .= $p->getClass()->name . ' ';

}

if($p->isPassedByReference()){

$s .= '&';

}

$s .= '$' . $p->name;

if($p->isOptional()) {

$s .= ' = ' . var_export($p->getDefaultValue(), TRUE);

}

$params []= $s;

}

$str .= implode(', ', $params);

$str .= '){' . PHP_EOL;

$lines = file($r->getFileName());

for($l = $r->getStartLine(); $l < $r->getEndLine(); $l++) {

$str .= $lines[$l];

}

return $str;

}

如果你有以下关闭:

$f = function (Closure $a, &$b = -1, array $c = array())

use ($foo)

{

echo $this->name;

echo 'test';

};

closure_dump()将给出以下结果:

function (Closure $a, &$b = -1, array $c = array (

)){

use ($foo)

{

echo $this->name;

echo 'test';

};

你看它不完美(数组参数).它也不会正确处理一些边缘情况,特别是如果闭包是嵌套的,或者多个内联闭包将传递给一行中的函数.后者对我来说看起来最成问题.因为,你只得到反射的起始行和结束行,在这种情况下,这两个函数都将在那一行上,你没有任何有用的信息来决定应该转储哪一行.到目前为止,我没有找到解决方案,我也不确定是否有解决方案.

但是,在大多数情况下,只要您不依赖它,它至少应该对调试有帮助. Feel free to enhance it!

在php中源代码怎么查看,查看PHP Closure的源代码相关推荐

  1. eclipser认java源码_java相关:Eclipse查看开发包jar里源代码的方法

    java相关:Eclipse查看开发包jar里源代码的方法 发布于 2020-5-21| 复制链接 摘记: Eclipse查看开发包jar里源代码的方法前言:最近我打算学习一下谷歌的类库Guava,下 ...

  2. 如何查看 .NET Core 3.1 源代码

    背景 在 .NET 走向开源后,我们可以方便的查看 .NET 内部的实现方式,学习和寻找问题,甚至参与到 .NET 的开发中. 前段时间,同事需要查看 C# 的 Task 类 (System.Thre ...

  3. 手机chrome查看源代码_如何查看Chrome扩展程序的源代码

    手机chrome查看源代码 Every Chrome extension that you install on your computer is actually constructed out o ...

  4. python怎么查看代码错误_python中的错误如何查看

    python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...

  5. Nilearn中的基本操作和查看

    目录 Nilearn简介 Nilearn操作 第一步:查看数据 第二步:平滑操作 第三步:保存结果到文件中 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 ...

  6. 在VS中如保快速查看DLL或exe的已导出的函数

    我们知道dumpbin 可以查看dll 或 exe 的导出函数接口,具体命令格式如下: Win+r 输入CMD 调出 cmd 指令窗口,输入: C:\Program Files (x86)\Micro ...

  7. python报错怎么看_python中的错误如何查看

    python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...

  8. 运行中的mysql状态查看

    运行中的mysql状态查看 对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries) / se ...

  9. python如何检查错误-python中的错误如何查看

    python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...

  10. oracle x kglob,x$kglob/x$kgltr 中library cache信息查看(结果同dump内容)

    Sys登录,执行此sql: select*fromX$KGLOBwherekglhdadr='2A5790C4'; 执行结果如下: ADDR08FDF118 INDX1093 INST_ID1 KGL ...

最新文章

  1. springboot基于全局异常处理的简单日志打印
  2. yum error: rpmdb: BDB0113 Thread/process
  3. lucky前面加a还是an_微信昵称前加个“A” 不是微商就是销售?看看这个“A”的含义!...
  4. mysql api查询例子_MySQL数据库:常用查询的例子Frommysqlapi
  5. Hadoop之资源调度器与任务推测执行
  6. [XSY] 计数(DP,NTT,分治)
  7. 移动端webapp开发必备知识
  8. Ubuntu backlight
  9. uBar如何设置Mac拥有Win式任务栏
  10. MySQL建表规范与常见问题
  11. IntelliJ IDEA使用教程(新手入门--持续更新)
  12. 基于MATLAB车牌识别算法实现 GUI界面
  13. python统计分析-卡方分析和方差分析
  14. H5游戏定制,分享专业的TOM游戏制作企业营销平台
  15. Linux查看mac地址
  16. Centos7升级OpenSSL 1.0.2k-fips
  17. java 根据年月获取周数、天数
  18. 寻仙服务器维护到几点,寻仙10月14日上午服务器例行维护公告
  19. 按阶段划分软件测试:单元测试 , 集成测试 , 系统测试 , 验收测试
  20. Tensorflow2.x: TensorFlow Addons介绍

热门文章

  1. Ant Design Tabs标签页隐藏的标签内元素无法获取到
  2. C#操作IIS6创建网站应用程序无效
  3. java进程和线程_Java™ 教程(进程和线程)
  4. 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程
  5. 【软件开发底层知识修炼】一 深入浅出处理器之一 微处理器与微控制器
  6. git 多用户多仓库配置
  7. java获取xml参数
  8. 百度贴吧的数据抓取和分析(一):指定条目帖子信息抓取
  9. Extjs之RowNumberer
  10. Android成长日记-Android布局优化