反射机制的简答理解
什么是翻身呢?
在PHP的面向对象编程中的对象,它被系统赋予自省的能力,而这个自省的过程,我们把它叫做反射。
在PHP中,反射是指在PHP运行状态中,扩展分析PHP程序,导出或者提取关于类、属性、方法、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能,被称为反射API。
我们接下来通过一段代码来感受一下:
class person{
public $name;
public $age;
public function say()
{
echo $this->name."<br>".$this->age;
}
public function set($name,$value)
{
echo 'set name to value';
$this->$name = $value;
}
public function get($name)
{
if(!isset($this->$name)){
echo 'unset name';
$this->$name = 'seting~~~';
}
return $this->$name;
}
}
$stu = new person();
$stu->name = 'luyaran';
$stu->age = 26;
$stu->sex = 'girl';
上述代码是一个简单的类,我们通过实例化它,以及赋值,让它有意义。
完事,我们通过反射API获取这个stu对象的方法和属性的一个列表:
//获取对象的属性列表
$reflect = new ReflectionObject($stu)
$props = $reflect->getProperties();
foreach($props as $key_p=>$value_p){
var_dump($value_p->getName());
}
//获取对象的方法列表
$method = $reflect->getMethods();
foreach($method as $key_m =>$value_m){
var_dump($value_m->getName());
}
除了反射API之外,我们还可以使用class函数来获取对象的各种属性以及方法的数据,如下:
//获取对象的属性的关联数组
var_dump(get_object_vars($stu));
//获取类属性
var_dump(get_class_vars(get_class($stu)));
//获取类的方法名称组成的数组
var_dump(get_class_methods(get_class($stu)))
待续…..
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: