使用反射 api获取类或者类中方法的源代码
class ReflectionUtil
{
public static function getClassSource(ReflectionClass $reflection)
{
$file = $reflection->getFileName();
$lines = file($file);
$start-line = $reflection->getStartLine();
$end-line = $reflection->getEndLine();
return implode(array_slice($lines, $start-line - 1, $end-line - $start-line + 1));
}
public static function getMethodSource(ReflectionMethod $reflection)
{
$file = $reflection->getFileName();
$lines = file($file);
$start-line = $reflection->getStartLine();
$end-line = $reflection->getEndLine();
return implode(array_slice($lines, $start-line - 1, $end-line - $start-line + 1));
}
}
两个方法惊人的相似。。。。
另外
class Test
{
public function testFunction()
{
return 0;
}
}
$reflectionClass = new ReflectionClass('Test');
$reflectionMethod = $reflectionClass->getMethod('testFunction');
$reflectionMethods = $reflectionClass->getMethods();
其中,$reflectionMethod即为ReflectionMethod类的对象。而$reflectionMethods则为对象的集合。
$reflectionParameters = $reflectionMethod->getParameters();
其中$reflectionParameters则为ReflectionParameter对象数组。