为什么有人要用这个:
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 容器在解决这个问题上提供了更多的功能,这是您无法通过简单的实例化对象实现的。
- 绑定(bind)接口(interface) - 您可以将特定接口(interface)及其实现绑定(bind)到容器中并将其解析为接口(interface)。这对于测试友好的代码和灵 active 很有用 - 因为您可以轻松地在一个地方更改实现而无需更改接口(interface)。 (例如,到处使用一些
Countable
接口(interface)作为从容器解析的目标,但接收它的实现。) - 依赖注入(inject) - 如果您要绑定(bind)类/接口(interface)并在某些方法/构造函数中将其作为依赖请求 - Laravel 会自动为您从容器中插入它。
- 条件绑定(bind) - 您可以绑定(bind)接口(interface),但根据情况解析不同的实现。
- Singleton - 您可以绑定(bind)对象的一些共享实例。
- Resolving Event - 每次容器解析 smth - 它都会引发一个事件,您可以在项目的其他地方订阅。
还有许多其他实践... 您可以在此处阅读更多详细信息 http://laravel.com/docs/5.1/container
关于php - 拉维尔 5 : app() helper function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33028544/