重构/获取php函数的代码
我可以通过它的名字以编程方式获得函数的代码?
喜欢:
function blah($a, $b) { return $a*$b; } echo getFunctionCode("blah");
可能吗?
有没有任何PHP自我描述函数来重build函数/类代码?
(而不是从源文件中获取源代码)
在Java中存在: http : //java.sun.com/developer/technicalArticles/ALT/Reflection/
在PHP中:
get_class_method(0函数)
types
ReflectionFunction(感谢Alin Purcaru)
扩展使用ReflectionFunction的build议,你可以使用像这样的东西:
$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);
没有任何东西会给你实际的函数代码。 接近可用的唯一东西是ReflectionFunction类。 对于具有ReflectionClass的类,可以为您提供类成员(常量,variables和方法)及其可见性,但仍然没有实际的代码。
解决方法 (它涉及读取源文件):
使用ReflectionFunction :: export来找出声明函数的文件名和行间隔,然后从那个行读取文件中的内容。 使用string处理来获取第一个{
和最后一个}
。
注意:Reflection API的logging很差。