php 时间格式化_3分钟短文 | PHP获取函数的代码片段,唯有反射最高效

引言

为了演示上一篇我们所说的PHP中反射的应用,本篇接着讲反射的应用。因为其特性,是操作函数和方法的,是函数的操作者,类的操作者,所以显得格外重要。

daa7611a9215a28fa952b16f171ffa08.png

我们从一个小需求出发,假如有一段这样的代码:

function blah($a, $b) { return $a*$b; }echo getFunctionCode("blah");

当然 getFunctionCode函数本身在PHP中是不存在的,这里是伪代码。有没有可能,根据函数名,获取函数的内部代码呢?

学习时间

这个您真得拿好小本本记好了,非常地重要。这个功能如果是做全局的文档,可能非常实用。生成的文档,自动把函数的内部方法写出来,作为代码示例,实时修改,实时生效。

我们需要借助 ReflectionFunction 用于获取函数的基本信息,比如文件名,开始和结束的行数等等,直接上代码:

$func = new ReflectionFunction('myfunction');$filename = $func->getFileName();$start_line = $func->getStartLine() - 1; $end_line = $func->getEndLine();$length = $end_line - $start_line;

上述代码假设有一个函数 myfunction,我们获取了 myfunction 所在的文件目录,并且得到了函数开始和结束的行数。

然后可以使用文件操作,将该段代码文本提取出来:

$source = file($filename);$body = implode("", array_slice($source, $start_line, $length));print_r($body);

file 函数把整个文件读入到一个数组内,使用 array_slice 切分出 myfunction 所在的行,就是了!

实测

我们使用 Laravel 7 框架内,添加一个助手函数如下:

79f4dc50a1c8b624d4c59f9ebafe7cd4.png

也就是格式化日期字符串。此函数在 composer 引导加载的时候,会全局有效。

为了测试,在 Commands 内添加临时指令,为了方便调试,使用 $this->info 输出信息:

fcde851007073b950eb5b0b8efd88638.png

命令行执行后输出内容如下:

60495921281d660a2c9df26c61a9ebed.png

与预想的结果一致。

写在最后

本文通过PHP提供的ReflectionFunction,将全局定义的函数,可以通过获取其绝对路径名,起始和结束行数,将函数的代码段打印出来。可以说是非常高阶而实用了。

Happy coding :-)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑屏幕卡住了按什么都没反应_手机突然“死机”了关机也不行,怎么按都没反应,怎么办?...

阅读本文前,请您先点击上面的“蓝色字体”,再点击“关注”,这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅,请放心关注。人有生老病死,手机也可能遇到死机黑屏的问题。在手机众多的“疑难杂症”中…

python中哪里用到缩进_建筑防火中各类门的总结归纳!乙级门?甲级门?都哪里用到了!...

大家在学习防火部分时,会遇到各种场所设置不同耐火性能的防火门,很杂乱的感觉,今天这里就好好总结一下,希望对大家能有帮助!一:双设门1.防烟楼梯间:此处的防烟楼梯间分为两种:一种是…

linux 打开php服务器文件夹,Linux下如何查看文件和文件夹大小

《Linux下如何查看文件和文件夹大小》要点:本文介绍了Linux下如何查看文件和文件夹大小,希望对您有用。如果有疑问,可以联系我们。相关主题:服务器配置1 Linux下查看文件和文件夹大小当磁盘大小超过标准时会有报警提示&#xff0c…

android media apex_APEX英雄主播即将登陆时代广场?人气十强介绍!

5月6日,在经过14天短暂而激烈的战斗后,由小葫芦星球联合海外fanx基金会共同举办的APEX英雄篇主播C位战「人气主播榜」率先顺利收官。而在明天即5月8日中午12点将准时开启本次APEX英雄篇主播C位战支线——「潜力主播榜」,前三强选手也同样能够…

linux php 执行python,Linux(Ubuntu)下php使用exec调用python程序返回json数据

问题起因:解决乱码问题,及解决PHP调用python外部程序的权限问题数据中带有中文,数据来自python读取微软数据库mssql2005 server的数据操作注意事项主要有两点:1.python返回的编码必须为utf-8(1) 必须导入codecs模块,操作代码如…

实时获取滚动条的高度_适用于星上快速处理的雷达高度计有效波高反演技术

卫星雷达高度计的主要观测参数之一为有效波高,数据产品中其数值的确定通过波形重跟踪来实现(Retracking),波形重跟踪的实现主要通过最大似然迭代完成,其主要的反演公示为W(t) PFS(t)*qs(t)*sr(t)。式中包括:高度计海面回波由平坦…

基于python的modbus协议编程_通往未来的网络可编程之路:Netconf协议与YANG Model

近年来,随着全球云计算领域的不断发展与业务的不断增长,促使网络技术也不断发展,SDN技术应运而生,从最初的基于Openflow的转发与控制分离的核心思想,人们不断的去扩展SDN的外延,目前,人们可以达…

mfc color 亮度_双十一4K投影仪怎么选?小心别掉“亮度坑” - 电视

导读:  不少影音爱好者计划在双十一期间购入4K投影仪,组建家庭影院、升级视觉享受,却因为选购产品亮度不足,让期待落空,还耗费时间、精力。投影仪亮度不足,画面看起来像是蒙上一层纱,不清晰&a…

dosbox edit.exe 如何使用_宅家30天,2万字节java高级工程师面试题解析,如何斩获阿里p7...

宅家里一个月,“闭关修炼”的你是不是正在为金三银四跳槽季发愁呢?小编今天说的这富含的15个互联网大厂Java高级工程师核心面试问题整理!内容包括:kafka面试题及解析18道ZooKeeper面试题及解析28道Linux 面试真题及解析45道MySQL面…

3三星闪存刷梅林_三星电子副会长李在镕造访西安

5月18日,陕西省委书记胡和平、省长刘国中在西安会见了三星电子副会长李在镕。Source:陕西日报胡和平表示,当前,陕西疫情防控取得阶段性重要成果,经济社会秩序加快恢复,包括三星在内的外资企业保持良好运行态…

stata中介效应的sobel检验_SPSS进行中介效应检验的实战操作与分析——杏花开生物医药统计...

中介变量( Mediator) 是一个重要的统计概念,如果自变量X通过某一变量M对因变量Y产生一定影响,则称M为X和Y的中介变量。研究中介作用的目的是在已知X和Y关系的基础上,探索产生这个关系的内部作用机制。在这个过程中可以把原有的关于同一现象的…

鼠标图标怎么自定义_酷鱼魔鼠——给鼠标添加酷炫的特效

酷鱼魔鼠是由酷鱼软件开发的一款非常有趣的鼠标特效软件。软件可以在你移动或者点击鼠标的时候,展示非常酷炫华丽的鼠标移动轨迹和点击特效。软件提供了非常多的鼠标动作特效,可以自定义设置鼠标移动、按下、双击、单机、点击桌面图标时的特效效果。并且…

uml+oopc嵌入式c语言开发精讲_嵌入式开发中更接近底层的汇编与C语言

分享本文,介绍下更接近硬件底层的C语言与汇编,解释 CPU 如何执行代码。高级语言与低级语言学习编程其实就是学习与计算机交流的语言。因为计算机不理解人类语言,通过编译器把人类写的代码转成二进制代码,才能在机器上运行。掌握了…

delphi xe http 收不到反馈消息_好消息!浦东这个小区3幢多层住宅都要加装电梯啦→...

原标题:好消息!浦东这个小区3幢多层住宅都要加装电梯啦→好消息!东明路街道这个小区要加装电梯,还是3个!规划设计方案公示中快和小布一起看看吧!▽环林东路879弄加装电梯项目建设单位:上海市浦东…

php调用美图接口,网易美图 API 接口调用与请求方法详细教程

原标题:网易美图 API 接口调用与请求方法详细教程网易美图 API 接口在网上已经很多且大都封装成了 API 供别人调用。支持前台跨域请求,以POST方式提交图片即可。网易美图 API 接口会随机更新一张美图,你可以选择调用本站的接口,也…

nlp 财务提取_RPA,智慧财务时代的“珍妮纺织机”来了?

智慧财务020社群与知识分享|上方蓝字星标置顶订阅|转载商务合作请添加首财君微信:cfo_tian昨日重磅《百亿存款谜局2》新戏码下的资管拷问一文秒懂财务机器人(RPA)的拐点和跳点。文 | 首财君【原创】出品 | 首席财务官(ID:cfoworld…

安装oracle配置监听出错,安装失败,无法建立监听?

本帖最后由 tomfish88 于 2013-12-5 13:23 编辑原来的监听如何删除呢,我把注册表的也删除了,还是安装不成功,QQ截图20131203114715.png (70.13 KB, 下载次数: 2)2013-12-5 13:21 上传QQ截图20131205132007.png (8.28 KB, 下载次数: 1)2013-12…

数据量大的sql怎么做优化_搜索引擎关键词优化怎么做

搜索引擎关键词优化怎么做新媒体营销的兴起,而且是方兴未艾,因此与客户建立起良好关系,保持良好的口碑关系,让客户信任你,公司适合增值服务:或者利润多,同时能在业务管理、销售管理、人事管理等…

vba显示正在加载_简单、易用的VBA过程积木代码

分享成果,随喜真能量(这是我视频教程的开场白)。大家好,今天继续和大家分享VBA编程中常用的简单“积木”过程代码第76-80讲,内容是:保存当前工作簿的副本到其它位置备份;不显示警告框&#xff1…

linux关机_Linux中shutdown,halt,poweroff,init 0区别

1)shutdown命令我们较常使用的是shutdown这个命令,这个命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以…