反射
面向对象编程中对象被赋予了自省的能力,而这个自省的过程就是反射。
反射,直观理解就是根据到达地找到出发地和来源。比如,一个光秃秃的对象,我们可以仅仅通过这个对象就能知道它所属的类、拥有哪些方法。
反射是指在PHP运行状态中,扩展分析PHP程序,导出或提出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射API。
PHP 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。
反射完整地描述了一个类或者对象的原型。反射不仅可以用于类和对象,还可以用于函数、扩展模块、异常等。
反射可以用于文档生成,可以用它对文件里的类进行扫描,逐个生成描述文档。
现代框架中的依赖注入大都是利用反射机制实现的。
当你需要去实例化一个类,但是这个类对你来说完全就是封闭或者说是未知的,你可以创建反射来与映射这个类。
通过反射探测到该类的构造方法,检测其参数等信息,如果有依赖则继续反射探测依赖的类。
反射的消耗也很大,在可以找到替代方案的情况下,就不要滥用。善用反射能保持代码的优雅和简洁,但反射也会破坏类的封装性,因为反射可以使本不应该暴露的方法或属性被强制暴露了出来。