laravel的「門面」與「契約」的問題
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 16:47:41
0
3
429

laravel的「門面」和「契約」的問題:
問題有兩個:
1、這兩個東西的使用場景是什麼?
2、我理解不了為什麼要使用這兩個詞,感覺八竿子打不著,這兩個詞跟它們的功能有什麼關聯嗎?

过去多啦不再A梦
过去多啦不再A梦

全部回覆(3)
给我你的怀抱

簡單的說:
外觀(你說的門面)是外觀模式的實作。 外观(你说的门面)是外观模式的实现。
协议(你说的契约)是工厂方法模式抽象工厂模式協定(你說的契約)是工廠方法模式抽象工廠模式的實作。

閱讀一下設計模式,你能收貨不少。

小葫芦

你要先學會用依賴注入容器。

Laravel的Facade就是從容器呼叫服務的捷徑。

沒有Facade的時候,你可能要這樣拿到一個服務/對象,然後呼叫:

$service = App::make('some_service');
$service->doSomething();

因為你在容器裡註冊了'some_service',所以容器能make一個實例給你。

Facade只是用靜態方式簡化了這個使用過程,底層用__callStatic把函數和參數傳給服務實例:

class SomeService extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'some_service'; // 这是容器里的键
    }
}

SomeService::doSomething(); // 底层和第一段代码是类似的

Contract就是一堆框架自帶的接口,可以透過依賴注入來具體實現。

public function index(SomeService $service) { // 等服务容器注入一个SomeService。
    $service->doSomething();
}

Facade和Contract只是依賴注入容器的不同使用方式,用Facade就是自己去容器取(把容器當Service Locator用),用Contract就是等容器注入依賴。

曾经蜡笔没有小新

門面,往簡單了說,就是為服務容器中綁定的服務起了個別名,利用class_alias函數
比如App對應Container類別。

契約,顧名思義,就是一種規定,雙方都認可並且遵守的東西,而“接口”也是具備這些特性,樓主問的,應該“面向接口編程”,面向接口編程,比較難說明白,本人資歷尚淺,需樓主自己多實踐,多體會,見諒…

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!