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

Car*_*cce 6 php dependency-injection laravel laravel-5 laravel-facade

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

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

namespace App\Tests;
class MyTest{

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

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

}
Run Code Online (Sandbox Code Playgroud)

创建一个Facade和一个服务提供者而不仅仅是使用它有什么好处

use App\Tests\MyTest;

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

public function someaction(){

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

    //or
    MyTest::anotherTest();

}

//... etc...
Run Code Online (Sandbox Code Playgroud)

Mop*_*ppo 5

Laravel 中的Facade只是从服务容器获取对象并调用其方法的便捷方法。

所以像这样调用 Facade :

//access session using a Facade 
$value = Session::get('key'); 
Run Code Online (Sandbox Code Playgroud)

就像做:

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

当外观session从服务容器中解析出密钥并调用get其上的方法时

一旦了解了 Facade 的作用,您就应该了解什么是 Service 容器以及使用它的好处是什么

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

我之前的一个答案文档页面中阐述了使用服务容器相对于手动创建对象的优势,但简要说明如下:

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