首頁 >php框架 >Laravel >laravel門面是什麼

laravel門面是什麼

WBOY
WBOY原創
2022-03-15 11:32:373633瀏覽

在laravel中,門面是為應用程式服務容器中的綁定類別提供的一個「靜態」介面。維護時能夠提供更易於測試、更靈活、簡潔優雅的語法,所有的門面都定義在「Illuminate\Support\Facades」命名空間下。

laravel門面是什麼

本文操作環境:Windows10系統、Laravel6版、Dell G3電腦。

laravel門面是什麼

Facades 為應用程式服務容器中的綁定類別提供了一個「靜態」介面。

Laravel 內建了許多 Facades ,可以存取絕大部分 Laravel 的功能。

Laravel 的門面作為服務容器中底層類別的“靜態代理”,相比於傳統靜態方法,在維護時能夠提供更加易於測試、更加靈活、簡明優雅的語法。

Laravel 的所有門面都定義在 Illuminate\Support\Facades 命名空間下。

我們可以輕鬆存取到門面:

use Illuminate\Support\Facades\Cache;
Route::get('/cache', function () {
    return Cache::get('key');
});

在整個 Laravel 文件中,許多例子都使用了門面來示範框架的各種功能特性。

何時使用 Facades

門面有許多優點,其提供了簡單、易記的語法,讓我們無需記住長長的類別名稱即可使用Laravel 提供的功能特性,此外,由於他們對 PHP 動態方法的獨到用法,使得它們很容易測試。

使用 Facades 時,有些地方還要特別注意。

使用 Facades 最主要的風險就是會造成類作用範圍的膨脹。

因為 Facades 使用起來非常簡單且不需要注入,就會使得我們在不經意間在單一類別中使用許多 Facades,從而導致類別變的越來越大。

而使用依賴注入的時候,使用的類別越多,建構方法就會越長,在視覺上就會引起注意,提醒你這個類別有點龐大了。因此在使用 Facades 的時候,要特別注意控制好類別的大小,讓類別的作用範圍保持短小。

在開發與 Laravel 互動的第三方擴充包時,建議最好選擇注入 Laravel 契約 ,而不是使用 Facades 的方式來使用類別。因為擴充包是在 Laravel 本身之外構建,所以你無法使用 Laravel Facades 測試輔助函數。

Facades Vs. 依賴注入

依賴注入的主要優點之一是切換注入類別的實現的能力。這在測試的時候很有用,因為你可以注入一個 mock 或 stub ,並斷言在 stub 上所呼叫的各種方法。

通常,真正的靜態方法是不可能被 mock 或 stub。但是,因為 Facades 使用動態方法來代理從服務容器解析的物件的方法調用,我們可以像測試注入的類別實例一樣來測試 Facades。例如,像下面的路由:

use Illuminate\Support\Facades\Cache;
 
Route::get('/cache', function () {
    return Cache::get('key');
})

我們可以這樣編寫測試來驗證 Cache::get 方法以我們期望的方式被調用:

use Illuminate\Support\Facades\Cache;
/**
 * 一个基础功能的测试用例。
 *
 * @return void
 */
public function testBasicExample()
{
Cache::shouldReceive('get')
->with('key')
->andReturn('value');
$this->visit('/cache')
->see('value');
}

【相關推薦:laravel視頻教程

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

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