php反射的原理

(*-*)浩
Lepaskan: 2023-02-23 14:52:02
asal
3280 orang telah melayarinya

php反射的原理

什么是反射呢?

在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 &#39;set name to value&#39;;
        $this->$name = $value;
    }
 
    public function get($name)
    {
        if(!isset($this->$name)){
            echo &#39;unset name&#39;;
            $this->$name = &#39;seting~~~&#39;;
        }
 
        return $this->$name;
    }
}
 
$stu = new person();
$stu->name = &#39;luyaran&#39;;
$stu->age = 26;
$stu->sex = &#39;girl&#39;;
Salin selepas log masuk

上述代码是一个简单的类,我们通过实例化它,以及赋值,让它含有意义。

完事,我们就来通过反射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());
}
Salin selepas log masuk

同时呢,反射不仅可以用作类和对象,还可以用于函数,扩展模块,异常等。

咱们呢,在这里就不赘述了,最后一点篇幅,就来聊聊反射的一些作用。

首先,它可以用作文档生成,所以,我们可以用它对文档中的类进行扫描,逐个生成扫描文档。

反射可以探知类的内部结构,也可以用作hook来实现插件功能,还有就是可以做动态代理。

Atas ialah kandungan terperinci php反射的原理. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan