首頁  >  文章  >  php框架  >  laravel中契約和門面有什麼差別

laravel中契約和門面有什麼差別

WBOY
WBOY原創
2022-02-15 16:29:452996瀏覽

區別:1、契約是指框架提供的一系列定義核心服務的接口,而門面為IoC服務容器的類別提供了靜態的接口;2、契約可以看做框架功能的方法定義接口,存放著大多數方法,而門面就是提供方法的,提供靜態調用,不需要注入接口。

laravel中契約和門面有什麼差別

本教學操作環境:windows10系統、Laravel6版,DELL G3電腦。

laravel中契約和門面有什麼區別

介紹

Laravel 的Contracts是一組接口,它們由框架提供並定義了核心服務。例如,illuste\Contracts\Queue\Queue 契約定義了排隊作業所需的方法,而 illuste\Contracts\Mail\Mailer 契約定義了發送郵件所需的方法。而Contracts也叫做契約

在我們前面的學習中,我們學到了很多輔助函數和Facades門面提供的簡單方法,它不需要類型的提示就可以實現方法. 在大多數情況下,每個門面都有對應的契約方法,和facades不同,契約允許你為類別定義顯示依賴關係.

何時使用契約

正如在其他地方所討論的,使用契約或Facades 的許多決定將取決於個人喜好和開發團隊的喜好。契約和 Facades 均可用於創建功能強大且經過良好測試的 Laravel 應用程式。只要聚焦在類別的職責應該單一上,您會發現使用契約還是 Facades 之間的實際差異其實很小。

如何使用契約

那麼,如何實現契約呢?它其實很簡單。

Laravel 中的許多類別都是透過 服務容器 解析的,包括控制器、事件偵聽器、中間件、佇列任務,甚至路由閉包。因此,要實作契約,您只需在被解析的類別的建構函式中「類型提示」介面。

例如,查看此事件偵聽器:

<?php
namespace App\Listeners;
use App\Events\OrderWasPlaced;
use App\Models\User;
use Illuminate\Contracts\Redis\Factory;
class CacheOrderInformation
{
    /**
     * Redis 工厂实现
     */
    protected $redis;
    /**
     * 创建一个事件处理实例
     *
     * @param  Factory  $redis
     * @return void
     */
    public function __construct(Factory $redis)
    {
        $this->redis = $redis;
    }
    /**
     * 处理事件
     *
     * @param  OrderWasPlaced  $event
     * @return void
     */
    public function handle(OrderWasPlaced $event)
    {
        //
    }
}

契約和門面的區別

契約其實是指框架提供的一系列定義核心的服務的介面,關鍵字就是這個介面,看上面的程式碼,就可以了解到這個介面提供了什麼功能,我們可以將契約看做框架功能的方法定義介面,這個介面裡面存放著我們需要用到的大多數方法.

門面說來說去也是提供方法的,但是我們每次要去使用到接口方法時,都需要注入相應的接口,很麻煩,所以門面誕生了,提供靜態調用,不需要注入介面.

【相關推薦:laravel影片教學

#

以上是laravel中契約和門面有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn