最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP Laravel門面的實現(xiàn)原理詳解

 更新時間:2023年02月09日 10:55:48   作者:自由de單車  
在Laravel中,門面為應(yīng)用服務(wù)容器中綁定的類提供了一個“靜態(tài)”接口,使得我們可以不用new這些類出來,就可以直接通過靜態(tài)接口調(diào)用這些類中的方法。本文就來詳細聊聊Laravel門面的實現(xiàn)原理,希望對大家有所幫助

環(huán)境

Laravel 5.4

原理

在Laravel中,門面為應(yīng)用服務(wù)容器中綁定的類提供了一個“靜態(tài)”接口,使得我們可以不用new這些類出來,就可以直接通過靜態(tài)接口調(diào)用這些類中的方法。

下面我們先看看一個門面類是怎么定義的:

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Player extends Facade
{

    protected static function getFacadeAccessor() {
        return 'player';
    }

}

門面類都繼承自Illuminate\Support\Facades\Facade父類,這個父類中有一個魔術(shù)方法:

/**
     * Handle dynamic, static calls to the object.
     *
     * @param  string  $method
     * @param  array   $args
     * @return mixed
     *
     * @throws \RuntimeException
     */
    public static function __callStatic($method, $args)
    {
        $instance = static::getFacadeRoot();

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

        return $instance->$method(...$args);
    }

當(dāng)我們靜態(tài)調(diào)用一個不存在的方法時,例如Player::playOneSong(),這個魔術(shù)方法就會被調(diào)用。它通過getFacadeRoot()方法創(chuàng)建出一個對象,然后在這個對象上真正執(zhí)行我們的方法。

再看看getFacadeRoot()方法:

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

這里通過我們自定義門面類中的getFacadeAccessor方法,獲取到一個service_id(暫且這么叫吧),然后傳給resolveFacadeInstance方法。

再往下看resolveFacadeInstance方法:

    /**
     * Resolve the facade root instance from the container.
     *
     * @param  string|object  $name
     * @return mixed
     */
    protected static function resolveFacadeInstance($name)
    {
        if (is_object($name)) {
            return $name;
        }

        if (isset(static::$resolvedInstance[$name])) {
            return static::$resolvedInstance[$name];
        }

        return static::$resolvedInstance[$name] = static::$app[$name];
    }

通過static::$app[$name]從服務(wù)容器中獲取 key 為name的對象,服務(wù)容器會幫我們實例化出對應(yīng)的對象(前提是已經(jīng)綁定好)。

服務(wù)容器$app是一個對象,但它實現(xiàn)了ArrayAccess接口,所以可以用這種數(shù)組的方式訪問。

獲取到對象后,放入到static::$resolvedInstance靜態(tài)變量中,這樣下次再獲取相同對象時,就不用重復(fù)實例化了。

到此這篇關(guān)于PHP Laravel門面的實現(xiàn)原理詳解的文章就介紹到這了,更多相關(guān)PHP Laravel門面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • php寫入數(shù)據(jù)到CSV文件的方法

    php寫入數(shù)據(jù)到CSV文件的方法

    這篇文章主要介紹了php寫入數(shù)據(jù)到CSV文件的方法,涉及php操作csv文件的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • PHP中SimpleXML函數(shù)用法分析

    PHP中SimpleXML函數(shù)用法分析

    這篇文章主要介紹了PHP中SimpleXML函數(shù)用法,以實例形式詳細分析了采用SimpleXML函數(shù)操作XML文件的技巧,并附帶說明了相關(guān)的SimpleXML函數(shù),需要的朋友可以參考下
    2014-11-11
  • PHP/Javascript/CSS/jQuery常用知識大全詳細整理

    PHP/Javascript/CSS/jQuery常用知識大全詳細整理

    PHP/Javascript/CSS/jQuery常用知識大全詳細整理(原創(chuàng))感興趣的朋友可以參考下
    2013-01-01
  • php基于session鎖防止阻塞請求的方法分析

    php基于session鎖防止阻塞請求的方法分析

    這篇文章主要介紹了php基于session鎖防止阻塞請求的方法,結(jié)合實例形式分析了phpsession鎖的使用及防止阻塞請求的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • PHP中遇到的時區(qū)問題解決方法

    PHP中遇到的時區(qū)問題解決方法

    最近,在用PHP+MySQL編寫一個小程序的時候,發(fā)現(xiàn)一個問題:錄入數(shù)據(jù)庫的時間與實際時間差8小時,這和中國位于的東8區(qū)是符合的。由于數(shù)據(jù)庫時間是由PHP寫入的,那問題就出現(xiàn)在PHP中了。
    2015-07-07
  • php5.4傳引用時報錯問題分析

    php5.4傳引用時報錯問題分析

    這篇文章主要介紹了php5.4傳引用時報錯問題,結(jié)合實例形式分析了php5.4傳引用時報錯問題及解決方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-01-01
  • PHP面向?qū)ο蟪绦蛟O(shè)計之對象的遍歷操作示例

    PHP面向?qū)ο蟪绦蛟O(shè)計之對象的遍歷操作示例

    這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計之對象的遍歷操作,結(jié)合具體實例形式分析了php面向?qū)ο蟪绦蛟O(shè)計中對象屬性遍歷的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-06-06
  • php將數(shù)據(jù)庫導(dǎo)出成excel的方法

    php將數(shù)據(jù)庫導(dǎo)出成excel的方法

    有時寫程序時后臺要求把大量數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中,比如考試成績、電話簿等一般都是存放在excel中的數(shù)據(jù),這時我們可把excel導(dǎo)出成csv文件,然后通過以下程序即可批量導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫中
    2010-05-05
  • PHP實現(xiàn)的簡單分頁類及用法示例

    PHP實現(xiàn)的簡單分頁類及用法示例

    這篇文章主要介紹了PHP實現(xiàn)的簡單分頁類及用法,結(jié)合實例形式分析的PHP分頁類的功能、定義與具體使用技巧,需要的朋友可以參考下
    2016-05-05
  • PHP簡單實現(xiàn)數(shù)字分頁功能示例

    PHP簡單實現(xiàn)數(shù)字分頁功能示例

    這篇文章主要介紹了PHP簡單實現(xiàn)數(shù)字分頁功能,結(jié)合實例形式分析了php數(shù)字分頁相關(guān)的數(shù)學(xué)運算與字符串操作相關(guān)技巧,需要的朋友可以參考下
    2016-08-08

最新評論

铁力市| 沐川县| 曲水县| 辉南县| 晋江市| 甘肃省| 胶州市| 林芝县| 治多县| 泾川县| 临潭县| 锡林浩特市| 安庆市| 南靖县| 黔东| 河南省| 阳西县| 特克斯县| 海丰县| 若尔盖县| 通许县| 安国市| 荣昌县| 仙居县| 渝北区| 溧水县| 达州市| 禄劝| 武宁县| 玛多县| 望奎县| 云安县| 新乐市| 方正县| 武冈市| 静宁县| 锡林郭勒盟| 聊城市| 焦作市| 筠连县| 东兴市|