php - 拉维尔 5 : app() helper function

标签 php html laravel

为什么有人要用这个:

function flash($title)
{
    $flash = app('App\Http\Flash');

    return $flash->message('This is a flash message');
}

关于这个:

use App\Http\Flash;

function flash($title)
{
    $flash = new Flash;

    return $flash->message('This is a flash message');
}

在第一种情况下,我们获取可用的容器实例。

在第二种情况下,我们加载 Flash 类并在我们的 flash 方法中实例化它。

我见过有人使用第一种方法,我想知道使用第二种方法是否有任何区别。

最佳答案

如果您像示例中那样使用它 - 您将不会获得任何利润。但是 Laravel 容器在解决这个问题上提供了更多的功能,这是您无法通过简单的实例化对象实现的。

  1. 绑定(bind)接口(interface) - 您可以将特定接口(interface)及其实现绑定(bind)到容器中并将其解析为接口(interface)。这对于测试友好的代码和灵 active 很有用 - 因为您可以轻松地在一个地方更改实现而无需更改接口(interface)。 (例如,到处使用一些 Countable 接口(interface)作为从容器解析的目标,但接收它的实现。)
  2. 依赖注入(inject) - 如果您要绑定(bind)类/接口(interface)并在某些方法/构造函数中将其作为依赖请求 - Laravel 会自动为您从容器中插入它。
  3. 条件绑定(bind) - 您可以绑定(bind)接口(interface),但根据情况解析不同的实现。
  4. Singleton - 您可以绑定(bind)对象的一些共享实例。
  5. Resolving Event - 每次容器解析 smth - 它都会引发一个事件,您可以在项目的其他地方订阅。

还有许多其他实践... 您可以在此处阅读更多详细信息 http://laravel.com/docs/5.1/container

关于php - 拉维尔 5 : app() helper function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33028544/

相关文章:

php - 使用 SDK2 for PHP 从 DynamoDB 获取值的更简单方法是什么?

PHP 打印; Css 仅适用于数据库的第一行

c# - CSS 不呈现

laravel - Chrome 将 Laravel dd 输出为单行而不格式化

javascript - 如何在我的 laravel 项目中添加自定义 javascript 文件?

php - 是否可以使用 MySQL - LOAD DATA LOCAL INFILE 仅上传 CSV 文件的前 10 行?

php - 更改 Laravel 路由参数

jquery - 如果 jQuery 有焦点,如何防止切换操作

具有两个组件的 Angular NgForm

php - 如何将 javascript 中的数组传递给 php - LARAVEL?