Php Laravel 5:app()辅助函数

Php Laravel 5:app()辅助函数,php,html,laravel,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

为什么有人要用这个:

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容器在解决这个问题上提供了更多的能力,这是用简单的实例化对象无法实现的

  • 绑定接口-您可以将特定接口及其实现绑定到容器中,并将其解析为接口。这对于测试友好的代码和灵活性非常有用,因为您可以在一个地方轻松更改实现,而无需更改接口。(例如,在任何地方使用一些
    Countable
    接口作为从容器解析的目标,但接收它的实现。)
  • 依赖项注入-如果您将绑定类/接口并在某些方法/构造函数中将其作为依赖项请求,则Laravel将自动为您从容器中插入它
  • 条件绑定-您可以绑定接口,但根据情况解决不同的实现
  • 单例-您可以绑定某个对象的共享实例
  • 解析事件-每次容器解析smth时,它都会引发一个事件,您可以在项目的其他位置订阅该事件
  • 还有很多其他的练习。。。
    您可以在此处阅读更详细的内容

    因此,如果有选择,您是否建议始终使用第一个选项而不是第二个选项?据我所知,它们都是Laravel容器,不是吗?不,我建议您仅在需要它的特权时才使用Laravel容器。因为在您的示例中,一切都是正确的-如果您只需要新的Flash实例-不需要使用容器。容器是一种工具,但不是规则。也许这可以完成@Silwerclaw的想法