PHP中"解决"/"解析"术语的含义是什么?

MyL*_*ary 9 php oop

我还在学习PHP,我认为不是很难理解我不是母语.

此时,在阅读了大量文档后,我跳入了深水区,因此我打开了Laravel源文件并逐个文件传输,尝试更好地了解MVC的整个实现如何包含路由,中间件聚集成一个高级别的部分代码

我见过很多我以前从未知道的术语,但有些术语很容易理解,而"已解决"和"解决"这两个词让我有点头脑.

它到底意味着什么?

文件中的文档很少有例子:

  1. "刷新所有绑定的容器并解析实例."

  2. "已经解决的一系列类型."

  3. "所有全球解决回调."

  4. "所有按类类别解析后的回调."

  5. "所有按类类别解析后的回调."

现在我有点困惑,解决和解决一个简单的翻译到我的语言意味着安定下来,决定,确定,分离,崩溃,但没有任何他们在代码对我有任何意义.

你能澄清一下解决意义吗?我觉得,一旦我理解这个词,一切都会顺利进行.

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服务容器配置MailerMockMailer在本地解析并SMTPMailer在生产时解析它.

                                  ---  resolution process ------
                                  |                            |
                                     ---------------------
                                     |                   |         ----------------
--------------------------------     |     Container     |    ---->|  SMTPMailer  |
| MyObject                     |     |                   |   /     ----------------
|                              |     |   | internal |    |  /
| __construct(Mailer $mailer) -|---->|   | registry |-------       ----------------
|                              |     |   |          |    |         |  MockMailer  |
-------------------------------      |                   |         ----------------
                                     ---------------------
Run Code Online (Sandbox Code Playgroud)

MyObject我们定义一些抽象Mailer依赖,然后由Containerinto SMTPMailerMockMailer,根据配置解决.

查看Laravel文档中的更多用法示例和说明.

"已经解决的一系列类型."

这是我们之前请求的类型数组(如FooBar),它们已经解析(我们已经知道实际的类映射到了什么FooBar).

"所有全球解决回调."

这是一组用于解决依赖关系的回调 - 这是Laravel内部注册表的一部分.

"所有按类类别解析后的回调."

这些是在分辨率完成时调用的回调.可能这与文档中的这一部分 - 容器事件有关.