中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel中Facade怎么用

發布時間:2021-01-18 10:05:15 來源:億速云 閱讀:142 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Laravel中Facade怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Facade的簡單使用

數據庫的使用:

$users = DB::connection('foo')->select(...);

IOC容器

眾所周知,IOC容器是 Laravel 框架的最最重要的部分。它提供了兩個功能,IOC和容器。

  • IOC(Inversion of Control),也叫控制反轉。說白了,就是控制對象的生成,使開發者不用關心對象的如何生成,只需要關心它的使用即可。

  • 而通過IOC機制生成的對象實例需要一個存放的位置,以便之后繼續使用,便是它的容器功能。

這次不準備講解IOC容器的具體實現,之后會有文章詳細解讀它。關于IOC容器,讀者只需要記住兩點即可:

  1. 根據配置生成對象實例;

  2. 保存對象實例,方便隨時取用;

簡化后 Facade 類

<?php
namespace facades;

abstract class Facade
{
    protected static $app;

    /** 
     * Set the application instance.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
    public static function setFacadeApplication($app)
    {   
        static::$app = $app;
    } 

    /** 
     * Get the registered name of the component.
     *
     * @return string
     *
     * @throws \RuntimeException
     */
    protected static function getFacadeAccessor()
    {
        throw new RuntimeException('Facade does not implement getFacadeAccessor method.');
    }

    /** 
     * Get the root object behind the facade.
     *
     * @return mixed
     */
    public static function getFacadeRoot()
    {   
        return static::resolveFacadeInstance(static::getFacadeAccessor());
    } 

    /**
     * Resolve the facade root instance from the container.
     *
     * @param  string|object  $name
     * @return mixed
     */
    protected static function resolveFacadeInstance($name)
    {
        return static::$app->instances[$name];
    }

    public static function __callStatic($method, $args)
    {
        $instance = static::getFacadeRoot();

        if (! $instance) {
            throw new RuntimeException('A facade root has not been set.');
        }   

        switch (count($args)) {
            case 0:
                return $instance->$method();
            case 1:
                return $instance->$method($args[0]);
            case 2:
                return $instance->$method($args[0], $args[1]);
            case 3:
                return $instance->$method($args[0], $args[1], $args[2]);
            case 4:
                return $instance->$method($args[0], $args[1], $args[2], $args[3]);
            default:
                return call_user_func_array([$instance, $method], $args);
        } 
    }
}

代碼說明:

  1. $app中存放的就是一個IOC容器實例,它是在框架初始化時,通過 setFacadeApplication() 這個靜態方法設置的

  2. 它實現了 __callStatic 魔術方法

  3. getFacadeAccessor() 方法需要子類去繼承,返回一個string的標識,通過這個標識,IOC容器便能返回它所綁定類(框架初始化或其它時刻綁定)的對象

  4. 通過 $instance 調用具體的方法

創建自己的Facade:

TEST1 的具體邏輯:

<?php
class Test1{
	public function hello()
	{
		print("hello world");
	}}

TEST1 類的Facade:

<?php
namespace facades;/**
 * Class Test1
 * @package facades
 *
 * @method static setOverRecommendInfo [設置播放完畢時的回調函數]
 * @method static setHandlerPlayer [明確指定下一首時的執行類]
 */class Test1Facade extends Facade{
    protected static function getFacadeAccessor()
    {   
        return 'test1';
    }   }

使用:

use facades\Test1Facade;Test1Facade::hello();  // 這是 Facade 調用

解釋:

  1. facades\Test1Facade 調用靜態方法 hello() 時,由于沒有定義此方法,會調用 __callStatic;

  2. 在 __callStatic 中,首先是獲取對應的實例,即 return static::$app->instances[$name];。這其中的 $name,即為 facades\Test1 里的 test1

  3. $app, 即為 IOC 容器,類的實例化過程,就交由它來處理。

感謝各位的閱讀!關于“Laravel中Facade怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

根河市| 蒙自县| 馆陶县| 正定县| 东乌珠穆沁旗| 定兴县| 镇原县| 通山县| 汽车| 建瓯市| 盈江县| 尚志市| 罗定市| 澎湖县| 普兰店市| 凤冈县| 昌都县| 壶关县| 丹东市| 阜阳市| 政和县| 泗洪县| 沈丘县| 尉氏县| 河曲县| 尚义县| 彝良县| 老河口市| 青州市| 东城区| 盐亭县| 鹤山市| 曲沃县| 始兴县| 酒泉市| 辉县市| 班戈县| 庆安县| 天柱县| 津南区| 鄂托克前旗|