我还在学习PHP,我认为不是很难理解我不是母语.
此时,在阅读了大量文档后,我跳入了深水区,因此我打开了Laravel源文件并逐个文件传输,尝试更好地了解MVC的整个实现如何包含路由,中间件聚集成一个高级别的部分代码
我见过很多我以前从未知道的术语,但有些术语很容易理解,而"已解决"和"解决"这两个词让我有点头脑.
它到底意味着什么?
文件中的文档很少有例子:
"刷新所有绑定的容器并解析实例."
"已经解决的一系列类型."
"所有全球解决回调."
"所有按类类别解析后的回调."
"所有按类类别解析后的回调."
现在我有点困惑,解决和解决一个简单的翻译到我的语言意味着安定下来,决定,确定,分离,崩溃,但没有任何他们在代码对我有任何意义.
你能澄清一下解决意义吗?我觉得,一旦我理解这个词,一切都会顺利进行.
Bor*_*rov 14
所以我打开了Laravel源文件,然后逐个文件,尝试更好地理解MVC的整个实现如何包含路由,中间件汇集成一个高级代码.
有一种更好的方法来理解框架源.使用调试器.
以任何简单的应用程序为例,设置XDebug并完成请求处理的整个过程.
首先跳过细节,找出请求处理中涉及哪些类和方法,然后你可以越来越深入.
至少对我来说,这种方式比阅读源代码要好得多.您将很快发现重要的东西和不重要的东西,并能够专注于基本部分.
现在让我们回到你的resolution问题:
"刷新所有绑定的容器并解析实例."
这是源文件 - Illuminate/Container/Container.php.以及相关文档:https://laravel.com/docs/5.0/container.
实际上,要了解源代码,首先需要了解文档中的概念.在这种情况下,他们正在讨论依赖注入容器,您需要了解它是如何工作的:
public function __construct(FooBar $dependency)$foo = new FooBar; $object = new MyObject($foo);; 相反,我们为我们配置Laravel的服务容器及其resolves依赖项resolution这里是我们询问服务容器的过程:"请给我们FooBar,请"它通过它的内部注册表找出(解决)实际应该创建什么对象我们为什么要做这个?因为我们不想对依赖项进行硬编码.
例如,您可以拥有一个依赖于的类Mailer.在生产中,您希望这样Mailer,SMTPMailer并且在测试时,您希望使用MockMailer将电子邮件写入文件的测试.
因此,您将Laravel服务容器配置Mailer为MockMailer在本地解析并SMTPMailer在生产时解析它.
--- resolution process ------
| |
---------------------
| | ----------------
-------------------------------- | Container | ---->| SMTPMailer |
| MyObject | | | / ----------------
| | | | internal | | /
| __construct(Mailer $mailer) -|---->| | registry |------- ----------------
| | | | | | | MockMailer |
------------------------------- | | ----------------
---------------------
Run Code Online (Sandbox Code Playgroud)
在MyObject我们定义一些抽象Mailer依赖,然后由Containerinto SMTPMailer或MockMailer,根据配置解决.
查看Laravel文档中的更多用法示例和说明.
"已经解决的一系列类型."
这是我们之前请求的类型数组(如FooBar),它们已经解析(我们已经知道实际的类映射到了什么FooBar).
"所有全球解决回调."
这是一组用于解决依赖关系的回调 - 这是Laravel内部注册表的一部分.
"所有按类类别解析后的回调."
这些是在分辨率完成时调用的回调.可能这与文档中的这一部分 - 容器事件有关.