//=====纯属是个人的理解,不一定正确,请谅解======
关于php的反射机制,php反射机制的最大的用处是通过一个实例化的对象来获取对象所属类的一些信息,而可以通过该对象所属类的相关信息来对对象进行别的操作。
下面我用一个例子来理解一下php的反射机制
首先先定义一个Person类,类里面有$name,$age,$sex的属性以及它们的get和set方法,这个很容易。
/**
* 这是Person类的注释
*/
class Person{
private $name='未命名';
private $age=0;
private $sex='';
/**
* setName(string name)[新建姓名]
*/
public function setName($n){
$this->name=$n;
}
public function getName(){
return $this->name;
}
public function setAge($a){
$this->age=$a;
}
public function getAge(){
return $this->age;
}
public function setSex($s){
$this->sex=$s;
}
public function getSex(){
return $this->sex;
}
}
然后我们先创建一个实例化对象,之后获取一下该对象的所属类,也就是Person类...
//...实例化对象...
$person=new Person();
//...利用反射机制得到对象所属类...
$ref_cls=new ReflectionClass($person);
是的,就是一个简单的ReflectionClass(对象)就可以获取到对象所属类Person了。
为了验证是否获取成功,我们再用一些方法来测试一下。
//...实例化对象...
$person=new Person();
//...利用反射机制得到对象所属类...
$ref_cls=new ReflectionClass($person);
//...打印反射类中所有的方法...
$arr=$ref_cls->getMethods();
print_r($arr);
//...打印反射类的注释...
var_dump($ref_cls->getDocComment());
//...打印第一个方法的注释...
$ref_fun=$arr[0];
var_dump($ref_fun->getDocComment());
//...invoke,执行方法...
//...setting...
$ref_method=new ReflectionMethod($person,'setName');
$ref_method->invoke($person,'new name');
//...getting...
$ref_method=new ReflectionMethod($person,'getName');
$ref_method->invoke($person);
var_dump($ref_method->invoke($person));
运行的结果如下:
这个反射机制就很方便前端人员来使用了,可以看得出来,php反射机制会把对象所属类中的所有的方法以及使用方法告诉前端供前端人员调用。
以上都是个人的理解,纯属有感而发...