【问题标题】:Why create a facade in laravel instead of calling a method directly?为什么在 laravel 中创建外观而不是直接调用方法?
【发布时间】:2016-03-17 13:06:31
【问题描述】:

我刚开始使用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...

【问题讨论】:

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


    【解决方案1】:

    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 的作用,您就应该了解什么是 Service 容器以及使用它有什么好处

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 2012-08-04
      • 2012-11-15
      • 2018-09-12
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      相关资源
      最近更新 更多