我现在想到的方法
只有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;
    }
}
?>例子上方法体内容可能比较简单. 实际比较复杂.
请问有什么方法可以 更容易获取 方法体内容过程吗??
在这里先谢谢啦

解决方案 »

  1.   

    反射结合数组截取
    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;
    } */
      

  2.   

    用反射<?php
    //定义一个自定义类
    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 结束行
    接下来怎么做,就不需要我说了吧?
      

  3.   

    反射,
    ReflectionClass
    ReflectionMethod
    ReflectionParameter都会用到,自己看一下manual就会了。