重构/获取 PHP 函数的源代码

2022-08-30 08:46:31

我可以通过编程方式按函数的名称获取函数的源代码吗?

喜欢:

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

可能吗?

有没有php自描述函数来重构函数/类代码?(我的意思是,与其直接从源文件获取源代码。

在Java中存在:http://java.sun.com/developer/technicalArticles/ALT/Reflection/


答案 1

扩展使用反射函数的建议,您可以使用如下内容:

$func = new ReflectionFunction('myfunction');
$filename = $func->getFileName();
$start_line = $func->getStartLine() - 1; // it's actually - 1, otherwise you wont get the function() block
$end_line = $func->getEndLine();
$length = $end_line - $start_line;

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

答案 2

没有任何东西可以给你函数的实际代码。唯一接近该可用值的是 ReflectionFunction 类。对于类,您可以使用ReflectClass,它为您提供了类成员(常量,变量和方法)及其可见性,但仍然没有实际的代码。


解决方法(它确实涉及读取源文件):
使用Refreprection::export找出声明函数的文件名和行间隔,然后在这些行上从该文件中读取内容。使用字符串处理获取第一个 和最后一个 之间的内容。{}

注意:反射 API 的文档记录很差。反射函数::导出自 PHP 7.4 起已弃用


推荐