【问题标题】:Laravel container binding names: uppercase vs. lowercaseLaravel 容器绑定名称:大写与小写
【发布时间】:2015-06-27 20:44:58
【问题描述】:

我正在学习 Laravel 的 IoC 容器是如何工作的。我已经明白了大部分,但有一件事让我思考。为什么有些绑定类型以小写字母开头,而另一些则是大写字母?

我知道对于大写字母,我们可以对类名或接口使用自动/手动解析器。小写的呢?是否只能在需要时手动解决,像这样?

$this->app->make('something');

或者还有其他使用小写绑定的目的吗?

【问题讨论】:

    标签: php laravel laravel-5 inversion-of-control ioc-container


    【解决方案1】:

    它们被用作服务的抽象命名或别名。例如,如果您为一个特定的 API 服务配置了一个 http 客户端,您可以命名它,例如'client.api',并在您的代码中动态解析它。

    你可以在任何你想要的地方通过

    app('client.api')
    

    或

    $this->app['client.api']
    

    甚至

    $this->app->make('client.api');
    

    它只是服务数组的一个键。

    它们还被广泛用作 Facades 中的解析器。

    【讨论】:

    • 我发现与 PHP 的核心行为相反,容器的类解析器区分大小写。更重要的是,与类名本身相比,它区分大小写,而不是类型提示。因此,如果我们不遵循 PSR-2 约定并将我们的类命名为小写,它可能会被别名自动解析。所以我说得对吗?只有两种方法可以从容器中解析:自动通过参数和手动通过 app('alias') 和类似的?
    • Container 只是一个关联数组,其中键是字符串名称,值是服务。当然,如果您将服务命名为“SomeThing”并尝试将其获取为“某物”,则会出现错误。所以是的,你必须像你命名它们一样正确地解决它们。如果你像完整的类名一样绑定它们,你将能够自动解析它们。但是,如果您抽象地命名它们,则只能手动解析它们。
    • 非常感谢您的解释!
    • 不客气!不要忘记接受答案;)
    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2012-12-01
    • 2015-02-09
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多