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

时间:2016-02-03 18:24:13

标签: php oop

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

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

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

这究竟意味着什么?

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

  1. “刷新所有绑定和已解析实例的容器。”

  2. “已解决的类型数组。”

  3. “所有全局解析回调。”

  4. “所有按类类别解析回调后。”

  5. “所有按类类别解析回调后。”

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

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

1 个答案:

答案 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的类。 在制作时,您希望此MailerSMTPMailer,并且在测试时您要使用MockMailer将电子邮件写入文件。

因此,您需要配置Laravel服务容器以在本地解析Mailer MockMailer,并在生产时将其解析为SMTPMailer

                                  ---  resolution process ------
                                  |                            |
                                     ---------------------
                                     |                   |         ----------------
--------------------------------     |     Container     |    ---->|  SMTPMailer  |
| MyObject                     |     |                   |   /     ----------------
|                              |     |   | internal |    |  /
| __construct(Mailer $mailer) -|---->|   | registry |-------       ----------------
|                              |     |   |          |    |         |  MockMailer  |
-------------------------------      |                   |         ----------------
                                     ---------------------

MyObject中,我们定义了一些抽象Mailer依赖关系,然后由Container解析为SMTPMailerMockMailer,具体取决于配置。

查看Laravel docs中的更多用法示例和说明。

  

"已解决的类型数组。"

这是我们之前请求的类型(如FooBar)的数组,已经解决(我们已经知道实际的类映射到FooBar)。

  

"所有全局解析回调。"

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

  

"所有按类类别解析回调。"

这些是在分辨率完成时调用的回调。 可能这与文档中的这一部分有关 - container events