反射机制的简答理解

什么是翻身呢?
在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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!