我还在学习PHP,我认为不是很难理解我不是母语。
此时,在阅读了大量文档后,我跳入了深水区,因此我打开了Laravel源文件并逐个文件传输,尝试更好地了解MVC的整个实现如何包含路由,中间件聚集到一起高级代码。
我看过很多我以前从未知道的术语,但有些术语很容易理解,而“已解决”和“解决”这两个词让我有点头脑。
这究竟意味着什么?
文件中的文件很少有例子:
“刷新所有绑定和已解析实例的容器。”
“已解决的类型数组。”
“所有全局解析回调。”
“所有按类类别解析回调后。”
“所有按类类别解析回调后。”
现在我有点困惑,解决和解决一个简单的翻译到我的语言意味着安定下来,决定,确定,分离,分解,但没有任何他们在代码对我有任何意义
请您澄清一下解决意义吗?我觉得,一旦我理解这个词,一切都会顺利进行。
答案 0 :(得分:10)
所以我打开了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 |
------------------------------- | | ----------------
---------------------
在MyObject
中,我们定义了一些抽象Mailer
依赖关系,然后由Container
解析为SMTPMailer
或MockMailer
,具体取决于配置。
查看Laravel docs中的更多用法示例和说明。
"已解决的类型数组。"
这是我们之前请求的类型(如FooBar)的数组,已经解决(我们已经知道实际的类映射到FooBar
)。
"所有全局解析回调。"
这是一组用于解决依赖关系的回调 - 这是Laravel内部注册表的一部分。
"所有按类类别解析回调。"
这些是在分辨率完成时调用的回调。 可能这与文档中的这一部分有关 - container events。