前言
反射它指在 PHP 运行状态中,扩展分析 PHP 程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
这种动态获取的信息以及动态调用对象的方法的功能称为反射 API。
反射是操纵面向对象范型中元模型的 API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。其用途如:自动加载插件,自动生成文档,甚至可用来扩充 PHP 语言
概念理解
什么是反射?
获取类的有关信息 ReflectionClass:https://www.php.net/manual/zh/class.reflectionclass.php
获取类的构造函数 getConstructor:https://www.php.net/manual/zh/reflectionclass.getconstructor.php
获取类的依赖类 getParameters:https://www.php.net/manual/zh/reflectionfunctionabstract.getparameters.php
通过下面的伪代码,可以获取到 class A 的构造函数,还有构造函数依赖的类。此处 class A 构造函数依赖 args ,而且通过 TypeHint 可以知道他是类型为 Class B。
此反射机制可以让我去解析一个类,能获取一个类的属性、方法、构造函数、构造函数所需要的参数。
1 |
|
IOC 容器
接下来介绍一下 Laravel 的 IOC 服务容器概念。在 laravel 框架中, 服务容器是整个 laravel 的核心,它提供了整个系统功能及服务的配置,调用。
容器按照字面上的理解就是装东西的东西,比如冰箱, 当我们需要冰箱里面的东西的时候直接从里面拿就行了。服务容器也可以这样理解, 当程序开始运行的时候,我们把我们需要的一些服务放到或者注册到 (bind) 到容器里面,当我需要的时候直接取出来 (make) 就行了。上面提到的 bind 和 make 就是注册 和 取出的 两个动作。
IOC容器代码
下面要上一段容器的代码了。下面这段代码不是 laravel 的源码, 而是来自一本书《laravel 框架关键技术解析》
https://learnku.com/articles/4076/how-to-understand-laravels-ioc-container