【发布时间】:2017-11-09 11:20:01
【问题描述】:
Laravel 中的反射实际上是如何工作的?
我尝试调试它,看看 Laravel 如何在控制器的构造函数或方法中使用反射来解决它们的依赖关系和子依赖关系,然后将其返回给我们。
但我发现它很难,而且看甚至理解 50% 的内容都非常复杂。从一个班级跳到另一个班级,我真的看不到它。试了几次调试,结果理解不高。
这一点和反思给我留下了深刻的印象,Laravel 使用它的方式让我心潮澎湃——真是太美了。我希望完全理解——整个过程——大体上,一步一步地。
从到达路线开始到最终拥有dd($x),其中$x 来自方法参数并且是TestClass,它具有TestClass2 的另一个依赖项,应该通过以下方式构造:@987654326 @
我认为这些都是美妙的力学和架构,理解这一点是我非常想要的。
我的问题是:Laravel 中的反射实际上是如何工作的?
这不是关于dd 伙计们...假设没有dd。正如我之前所说的——当我们从class method 实例化这个对象时。这不是要倾倒它,而是要从 method injection 到 reflection 获得它。
dd 只是一个例子。它甚至可以是die(var_dump());,它会起作用
【问题讨论】:
-
您在这里提出了一个非常广泛的问题,而这不是解决 How do this work... 风格问题的最佳论坛。
dd本身使用反射来输出有关对象的私有信息。依赖注入层使用它递归地检查目标类的依赖关系。这些都不是 Laravel 特有的——大多数用于转储变量或 DI 的包都会做类似的事情。 -
@iainn 编辑了我的问题
-
Laravel 不仅仅是反射。引擎盖下发生了很多事情。从阅读这些文章开始:alanstorm.com/category/laravel/#container
-
@Hamoud 我知道。这就是为什么这个问题也很宝贵
-
@CyRossignol 可能是关于“将类依赖项与路由参数分开所需的一些额外逻辑”
标签: php laravel reflection inversion-of-control