class A
{
    public $ab= 1;
    private $bc=2;
    public static $instance = null;
    public function abc($a,$b){
        return $a . "|".$b;
    }
    public function dd(){
        return "hello world!!";
    }
    /**
     * type 方法
     */
    public function mf($type = 1){
        return "type:".$type;
    }
}
public function rels(){
        $obj = new \A();
        //print_r($obj);
         //创建一个反射类
        $obj2 = new \ReflectionClass($obj);
        $s = $obj2->newInstance();//相当于实例化这个类
        $m = $obj2->getMethods();
        foreach ($m as $k){
            //print_r($k->getDocComment());
        }
        $op = $obj2->getProperties();//类的属性
//        print_r($op);
         //调用方法的方式一
         //echo $s->abc(1,2);
         //调用方法的方式二
         //获取类的方法
         $method = $obj2->getMethod("abc");
//         //调用类的方法 参数:1.实例化类 2.方法的参数
//         $method->invokeArgs($s,["111","5555"]);
//
//         //调用方法的方式三 不带参数的方法
//         $method = $obj2->getMethod("dd");
//         //echo $method->invoke($s);
//
//         //判断某个方法是否是公共的
//         $pu = new \ReflectionMethod($obj,"dd");
//         if ($method->isPublic()){
//             echo "dd方法是公共的";
//         }
         //获取方法参数
         print_r($method->getParameters());
         //获取方法参数个数
         print_r($method->getNumberOfParameters());
     }