为什么在laravel中创建一个外观而不是直接调用方法?

时间:2016-03-17 13:06:31

标签: php laravel dependency-injection laravel-5 laravel-facade

我刚从laravel开始,想要了解这一点......

让我们说我们的应用程序中有一个类:

namespace App\Tests;
class MyTest{

    public function sayHello($name){
        echo "Hello, $name!";
    }

    public static function anotherTest(){
        echo "another test...";
    }

}

创建外观和服务提供商而不仅仅是将其用作

,有什么好处
use App\Tests\MyTest;

//... controller declarations here ....

public function someaction(){

    $mt = new MyTest();
    $mt->sayHello('John');

    //or
    MyTest::anotherTest();

}

//... etc...

1 个答案:

答案 0 :(得分:3)

Laravel中的Facade只是从Service Container获取对象并在其上调用方法的便捷方式。

所以像这样调用Facade:

//access session using a Facade 
$value = Session::get('key'); 

就像在做:

//access session directly from the Service Container
$value = $app->make('session')->get('key'); 

当Facade从服务容器中解析session密钥并在其上调用方法get

一旦理解了Facade的功能,您应该了解什么是服务容器以及使用它有什么好处

Laravel云中的服务容器是依赖注入容器和应用程序的注册表

使用服务容器而不是手动创建对象的优势在我的previous answersdoc页面之一中说明,但简要说明了一下:

  • 管理对象即时的类依赖性的能力
  • 将接口绑定到具体类,以便在程序中请求接口时,服务容器会自动实例化具体类。更改绑定的具体类将更改通过所有应用程序实例化的具体对象
  • 可以创建单个插件并稍后将其取回(Singleton)