欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年02月09日 10:55:48   作者:自由de單車  
在Laravel中,門面為應(yīng)用服務(wù)容器中綁定的類提供了一個“靜態(tài)”接口,使得我們可以不用new這些類出來,就可以直接通過靜態(tài)接口調(diào)用這些類中的方法。本文就來詳細(xì)聊聊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獲取某個目錄大小的代碼

    php獲取某個目錄大小的代碼

    大致就是不知道目錄下面又多少層目錄, 也不知道又多少文件, 需要統(tǒng)計占用空間大小, 這個可以用在 相冊/數(shù)據(jù)庫占用/網(wǎng)絡(luò)U盤 等程序中.
    2008-09-09
  • js限制checkbox勾選的個數(shù)以及php獲取多個checkbbox的方法深入解析

    js限制checkbox勾選的個數(shù)以及php獲取多個checkbbox的方法深入解析

    以下是對js限制checkbox勾選的個數(shù)以及php獲取多個checkbbox的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • PHP中如何使用Redis接管文件存儲Session詳解

    PHP中如何使用Redis接管文件存儲Session詳解

    這篇文章主要給大家介紹了關(guān)于在PHP中如何使用Redis接管文件存儲Session的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • PHP圖像處理之imagecreate、imagedestroy函數(shù)介紹

    PHP圖像處理之imagecreate、imagedestroy函數(shù)介紹

    這篇文章主要介紹了PHP圖像處理之imagecreate、imagedestroy函數(shù)介紹,imagecreate用于創(chuàng)建一個圖像,imagedestroy用于銷毀一個圖像,需要的朋友可以參考下
    2014-11-11
  • 深入解析php中的foreach問題

    深入解析php中的foreach問題

    本篇文章是對php中的foreach問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php cli 方式 在crotab中運行解決

    php cli 方式 在crotab中運行解決

    使用php腳本寫了一個腳本,需要在crontab中定期運行,但是出現(xiàn)如下錯誤
    2010-02-02
  • php實現(xiàn)簡易聊天室應(yīng)用代碼

    php實現(xiàn)簡易聊天室應(yīng)用代碼

    聊天應(yīng)用程序在網(wǎng)上非常常見,開發(fā)人員在構(gòu)建這類應(yīng)用程序時的選擇也很多。這篇文章介紹了如何實現(xiàn)基于PHP-AJAX的聊天應(yīng)用程序,并且不需要刷新頁面就可以發(fā)送和接收消息,需要的朋友可以參考下
    2015-09-09
  • 解決微信授權(quán)回調(diào)頁面域名只能設(shè)置一個的問題

    解決微信授權(quán)回調(diào)頁面域名只能設(shè)置一個的問題

    在做項目集成微信登錄以及微信支付的時候,都需要進(jìn)行用戶授權(quán)。本文主要介紹了關(guān)于網(wǎng)頁授權(quán)回調(diào)域名的說明以及解決微信授權(quán)回調(diào)頁面域名只能設(shè)置一個問題的方案。需要的朋友可以參考借鑒
    2016-12-12
  • PHP中類的繼承和用法實例分析

    PHP中類的繼承和用法實例分析

    這篇文章主要介紹了PHP中類的繼承和用法,較為詳細(xì)的分析了php中類的繼承方法、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-05-05
  • PHP二維數(shù)組去重實例分析

    PHP二維數(shù)組去重實例分析

    這篇文章主要介紹了PHP二維數(shù)組去重的方法,結(jié)合實例形式分析了php數(shù)組遍歷、判斷及去除重復(fù)項的相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11

最新評論