我现在想到的方法
只有3种
1.使用 fopen while(feof) 获取 { } 数量截取方法体内容.
2.使用 explode('function',fopen)
3.递归 和 1. 差不多没什么区别。我想问有什么方法比较快的呢?
例如<?php
class a
{
public function a(){echo a;}
/*b*/
public function b()
{echo b;}
//c
public function c(){
echo c;
}
}
?>例子上方法体内容可能比较简单. 实际比较复杂.
请问有什么方法可以 更容易获取 方法体内容过程吗??
在这里先谢谢啦
只有3种
1.使用 fopen while(feof) 获取 { } 数量截取方法体内容.
2.使用 explode('function',fopen)
3.递归 和 1. 差不多没什么区别。我想问有什么方法比较快的呢?
例如<?php
class a
{
public function a(){echo a;}
/*b*/
public function b()
{echo b;}
//c
public function c(){
echo c;
}
}
?>例子上方法体内容可能比较简单. 实际比较复杂.
请问有什么方法可以 更容易获取 方法体内容过程吗??
在这里先谢谢啦
class a
{
public function a(){echo a; }
/*b*/
public function b(){
echo b;
}
//c
public function c(){
echo c;
}
}$class = new ReflectionClass('a');
$method=$class->getMethod('b');
$filename=$method->getFileName();//获取文件名
$start=$method->getStartLine();//获取方法起始行
$length=$method->getEndLine()-$start;//获取方法体长度$source=file($filename);
$code = implode('',array_slice($source,$start-1,$length+1));
echo $code;/* public function b(){
echo b;
} */
//定义一个自定义类
class a
{
public function a(){echo a;}
/*b*/
public function b()
{echo b;}
//c
public function c(){
echo c;
}
}//实例化一个反射类
$reflectionClass = new ReflectionClass('a');
//导出该类信息
$s = Reflection::export($reflectionClass, 1);preg_match_all('/@@ (\S+)\s+(\d+)\s-\s(\d+)/s', $s, $r);
print_r($r);得到Array
(
[0] => Array
(
[0] => @@ C:\AMP\web\ide_tmp.php 5 - 5
[1] => @@ C:\AMP\web\ide_tmp.php 7 - 8
[2] => @@ C:\AMP\web\ide_tmp.php 10 - 12
) [1] => Array
(
[0] => C:\AMP\web\ide_tmp.php
[1] => C:\AMP\web\ide_tmp.php
[2] => C:\AMP\web\ide_tmp.php
) [2] => Array
(
[0] => 5
[1] => 7
[2] => 10
) [3] => Array
(
[0] => 5
[1] => 8
[2] => 12
))下标 1 是文件名
下标 2 起始行
下标 3 结束行
接下来怎么做,就不需要我说了吧?
ReflectionClass
ReflectionMethod
ReflectionParameter都会用到,自己看一下manual就会了。