PHP · 2016/03/25 0

PHP反射类的理解(代码篇)

<?php 
/**
 * 关于反射类的理解
 */
class Person {

    /** type=chenjie */
    public  $chenjie = 'chenjie00';  

    /** type=chenjie */
    public  $chenjie1 = 'chenjie11';  

    private function getName(){
        echo  $this->chenjie;
    }

    public function getName1(){
        echo $this->chenjie1;
    }

}

//建立 Person这个类的反射类 
$class = new ReflectionClass('Person'); 

//打印所有属性名,包含private,protected,public
$properties = $class->getProperties();  
foreach ($properties as $key => $value) {
    var_dump($value->getName());
}



//打印所有属性的注释并正则,包含private,protected,public
foreach($properties as $property) {  
    $docblock = $property->getDocComment();  
    //只能打印多行注释     
    var_dump($docblock);
    preg_match('/ type\=([a-z_]*) /', $docblock, $matches);  
    var_dump($matches);
}  


//打印所有方法名
foreach ($class->getMethods() as $key => $value) {
    var_dump($value->getName());
}

/** 如何执行方法 */
//相当于实例化Person 类
$instance  = $class->newInstanceArgs(); 
//执行getName1方法,方法必须是public属性的,否则会报fatal error 
$instance->getName1(); 
      
//获取Person getName1方法  
$ec=$class->getmethod('getName1');  
//执行getName1方法,方法必须是public属性的,否则会报fatal error 
$ec->invoke($instance);