前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟短文 | PHP获取函数的代码片段,唯有反射最高效!

3分钟短文 | PHP获取函数的代码片段,唯有反射最高效!

作者头像
程序员小助手
发布2020-08-06 11:22:34
4840
发布2020-08-06 11:22:34
举报
文章被收录于专栏:程序员小助手程序员小助手

引言

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

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

代码语言:javascript
复制
function blah($a, $b) { return $a*$b; }
echo getFunctionCode("blah");

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

学习时间

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

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

代码语言:javascript
复制
$func = new ReflectionFunction('myfunction');
$filename = $func->getFileName();
$start_line = $func->getStartLine() - 1;
$end_line = $func->getEndLine();
$length = $end_line - $start_line;

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

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

代码语言:javascript
复制
$source = file($filename);
$body = implode("", array_slice($source, $start_line, $length));
print_r($body);

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

实测

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 学习时间
  • 实测
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档