久久99久久99精品_成人区人妻精品一区二区不卡网站_久久精品人人做人人爽电影蜜月_久久久久99精品国产片

淺談 thinkphp composer 擴(kuò)展包加載原理 環(huán)球視訊

時(shí)間:2023-06-14 22:21:52
淺談 thinkphp composer 擴(kuò)展包加載原理本文將介紹 ThinkPHP 中 Composer 擴(kuò)展包的加載原理,幫助讀者更好地理解和應(yīng)用該功能。前言

如題,今天感覺(jué)好久沒(méi)有更新博客了。最近迷上了物聯(lián)網(wǎng)開(kāi)發(fā)。一直在研究stm32、51這些東西。想起來(lái)前幾天群里面有人問(wèn)到tp擴(kuò)展包原理。其實(shí)這個(gè)前幾年也就研究過(guò)。網(wǎng)上搜了搜發(fā)現(xiàn)相關(guān)文章也很少(也有可能是我搜索姿勢(shì)不對(duì))今天就來(lái)寫(xiě)一篇thinkphp composer包加載原理

概覽當(dāng)進(jìn)行 composer update或者 composer require操作時(shí)。則會(huì)執(zhí)行service:discover這個(gè)命令。把當(dāng)前所有已經(jīng)加載的庫(kù)信息都進(jìn)行一次匹配。如果匹配到了think關(guān)鍵字的services屬性。則把服務(wù)類輸出成配置文件到vendor/services.php文件中當(dāng)一次應(yīng)用初始化(通常為一次訪問(wèn)開(kāi)始時(shí)).則會(huì)引入vendor/services.php中的service服務(wù)類到當(dāng)前應(yīng)用內(nèi)進(jìn)行初始化源碼解析composer包加載流程文字詳解 建議先閱讀一下這篇前兩年我寫(xiě)的文章 Thinkphp6源碼解析之分析 路由篇-請(qǐng)求流程

在第三步進(jìn)入到Http->runWithRequest這個(gè)方法中后。可以看到又調(diào)用了initialize方法

追進(jìn)這個(gè)方法可以看到


(資料圖片)

追進(jìn)initialize方法看實(shí)現(xiàn)

/**     * 初始化應(yīng)用     * @access public     * @return $this     */    public function initialize()    {        // 設(shè)置當(dāng)前初始化狀態(tài)        $this->initialized = true;                // 設(shè)置應(yīng)用開(kāi)始時(shí)間        $this->beginTime = microtime(true);                // 獲取到php的內(nèi)存        $this->beginMem  = memory_get_usage();        // 加載環(huán)境變量 例如當(dāng)前應(yīng)用目錄下的 .env文件        $this->loadEnv($this->envName);        // 設(shè)置配置文件后綴        $this->configExt = $this->env->get("config_ext", ".php");                // 調(diào)試模式設(shè)置        $this->debugModeInit();        // 加載全局初始化文件        $this->load();        // 加載應(yīng)用默認(rèn)語(yǔ)言包        $this->loadLangPack();        // 監(jiān)聽(tīng)AppInit        $this->event->trigger(AppInit::class);                // 設(shè)置php默認(rèn)時(shí)區(qū)        date_default_timezone_set($this->config->get("app.default_timezone", "Asia/Shanghai"));        // 初始化當(dāng)前系統(tǒng)配置的默認(rèn)服務(wù)        foreach ($this->initializers as $initializer) {// 調(diào)用make函數(shù)生成對(duì)象。并且執(zhí)行對(duì)象中的init方法            $this->make($initializer)->init($this);        }        return $this;    }

重點(diǎn)是初始化當(dāng)前系統(tǒng)配置的默認(rèn)服務(wù)這個(gè)$this->make($initializer)->init($this)函數(shù),看看initializers屬性

/**     * 應(yīng)用初始化器     * @var array     */    protected $initializers = [        Error::class,        RegisterService::class,        BootService::class,    ];

追到這里就是關(guān)鍵了。上面把這里面的類進(jìn)行初始化。并且執(zhí)行類中的init方法。直接看RegisterService::class類的init方法

public function init(App $app)    {        // 獲取當(dāng)前項(xiàng)目根目錄。拼接上 vendor/services.php        $file = $app->getRootPath() . "vendor/services.php";        $services = $this->services;        if (is_file($file)) {            $services = array_merge($services, include $file);        }        // 初始化services        foreach ($services as $service) {            if (class_exists($service)) {                $app->register($service);            }        }    }

讀到這里的可以看看自己項(xiàng)目vendor目錄下是不是有一個(gè)services.php,接下來(lái)講一講composer.json這個(gè)文件在tp框架中的composer.json有這樣一個(gè)配置

這里這個(gè)概念我直接讓chatgpt來(lái)解讀。解讀內(nèi)容如下

接下來(lái)直接看service:discover這個(gè)命令。追到vendor\topthink\framework\src\think\console\command\ServiceDiscover.php文件

public function execute(Input $input, Output $output)    {        // 獲取到當(dāng)前項(xiàng)目根目錄下的 vendor/composer/installed.json 文件        if (is_file($path = $this->app->getRootPath() . "vendor/composer/installed.json")) {            // json解析            $packages = json_decode(@file_get_contents($path), true);            // Compatibility with Composer 2.0            if (isset($packages["packages"])) {                $packages = $packages["packages"];            }            $services = [];            foreach ($packages as $package) {                // 判斷當(dāng)前包是否在extra字段里面聲明了think關(guān)鍵字中的services屬性。如果聲明了就把services給裝載到services變量?jī)?nèi)                if (!empty($package["extra"]["think"]["services"])) {                    $services = array_merge($services, (array) $package["extra"]["think"]["services"]);                }            }            $header = "http:// This file is automatically generated at:" . date("Y-m-d H:i:s") . PHP_EOL . "declare (strict_types = 1);" . PHP_EOL;            // 用var_export函數(shù)把services變量打印成可讀性代碼。并且寫(xiě)入到根目錄vendor目錄下的services            $content = "app->getRootPath() . "vendor/services.php", $content);            $output->writeln("Succeed!");        }

一直到這就算結(jié)束了

寫(xiě)在最后

如果覺(jué)得這篇文章對(duì)你有幫助。不妨點(diǎn)個(gè)贊留個(gè)關(guān)注再走

標(biāo)簽:

來(lái)源:博客園
0
上一篇:貴陽(yáng)香菇肉丁最正宗的做法?_今日熱文 下一篇:最后一頁(yè)

最近更新

  Copyright @ 2001-2013 m.caidouzi.com All Rights Reserved 財(cái)經(jīng)新聞網(wǎng) 版權(quán)所有 京ICP備12018864號(hào)-1

  網(wǎng)站所登新聞、資訊等內(nèi)容, 均為相關(guān)單位具有著作權(quán),轉(zhuǎn)載請(qǐng)注明出處

  未經(jīng)彩迅新聞網(wǎng)書(shū)面授權(quán),請(qǐng)勿建立鏡像 聯(lián)系我們:  291 32 36@qq.com

營(yíng)業(yè)執(zhí)照公示信息

 

久久99久久99精品_成人区人妻精品一区二区不卡网站_久久精品人人做人人爽电影蜜月_久久久久99精品国产片
    <rt id="cybpe"></rt>

    <rt id="cybpe"><optgroup id="cybpe"><strike id="cybpe"></strike></optgroup></rt>
    亚洲成人免费av| 国产精品系列在线观看| 日韩精品一区二区三区在线观看| 蜜桃av一区二区三区电影| 久久综合色鬼综合色| gogo大胆日本视频一区| 午夜精品久久久久久久| 精品国产凹凸成av人网站| 成人app下载| 视频一区欧美精品| 久久久久久夜精品精品免费| 99久久精品国产毛片| 日本欧美一区二区| 国产情人综合久久777777| 欧美中文字幕一二三区视频| 奇米亚洲午夜久久精品| 欧美国产激情二区三区| 欧美日韩一区二区在线观看 | 蜜桃精品视频在线| 国产精品伦一区| 91精品麻豆日日躁夜夜躁| 成人久久久精品乱码一区二区三区| 亚洲自拍偷拍图区| 久久综合九色综合欧美亚洲| 色噜噜狠狠成人网p站| 久久99热狠狠色一区二区| 一区二区中文视频| 日韩欧美一二三| 日本高清成人免费播放| 精品一区二区精品| 一区二区三区电影在线播| 久久综合av免费| 欧美日韩另类国产亚洲欧美一级| 国产黄色精品网站| 亚州成人在线电影| 中文字幕日本乱码精品影院| 日韩欧美国产不卡| 日本精品免费观看高清观看| 国产在线精品一区二区夜色| 亚洲精品欧美激情| 欧美激情一区二区三区全黄| 91精品国产综合久久久久久久久久| 成人性视频网站| 久久精品国产在热久久| 亚洲自拍偷拍欧美| 欧美国产综合一区二区| 欧美一级久久久| 欧美午夜免费电影| 成人国产精品视频| 国产一区久久久| 男女性色大片免费观看一区二区 | 国产精品亚洲人在线观看| 亚洲18女电影在线观看| 日韩伦理免费电影| 国产亚洲成av人在线观看导航| 欧美精选午夜久久久乱码6080| 成人在线综合网| 极品尤物av久久免费看| 日韩激情一区二区| 一区二区三区毛片| 国产精品对白交换视频| 久久久.com| 日韩女优毛片在线| 欧美日韩成人综合天天影院| 91免费国产在线| jlzzjlzz国产精品久久| 国产福利91精品一区二区三区| 日韩不卡一区二区三区| 亚洲一区视频在线| 亚洲激情自拍偷拍| 亚洲欧美国产三级| 国产精品三级电影| 中文字幕不卡在线观看| 久久久www免费人成精品| 欧美mv日韩mv亚洲| 日韩欧美精品在线视频| 欧美精品日韩精品| 欧美日韩免费高清一区色橹橹| 在线视频你懂得一区| 97久久超碰精品国产| 成人av在线资源网站| 丰满少妇在线播放bd日韩电影| 国产精品亚洲午夜一区二区三区| 激情图区综合网| 国内精品免费在线观看| 激情综合色播激情啊| 韩国三级中文字幕hd久久精品| 看电影不卡的网站| 蜜桃免费网站一区二区三区| 日本在线不卡视频一二三区| 婷婷开心久久网| 日日夜夜精品免费视频| 五月天一区二区三区| 午夜影院久久久| 日韩电影网1区2区| 男女视频一区二区| 久久97超碰国产精品超碰| 精品亚洲成a人| 国产一区二区三区四区五区美女| 国产精品小仙女| 成人一级视频在线观看| 成人免费不卡视频| 99久久国产综合精品女不卡| 91在线丨porny丨国产| 色婷婷综合久久久| 欧美日韩激情一区| 91麻豆精品国产综合久久久久久| 欧美一区二区三区不卡| 精品国产污污免费网站入口 | 亚洲欧美影音先锋| 亚洲综合色噜噜狠狠| 天堂午夜影视日韩欧美一区二区| 日本不卡一二三区黄网| 国内外成人在线| 成人免费观看视频| 色妞www精品视频| 欧美男男青年gay1069videost| 日韩一区二区三区在线视频| 2021中文字幕一区亚洲| 国产亚洲一区字幕| 亚洲伦理在线免费看| 亚洲h动漫在线| 国产一区福利在线| av亚洲精华国产精华精| 欧美中文字幕一区二区三区亚洲| 在线播放中文字幕一区| 久久人人超碰精品| 亚洲人精品一区| 日韩va亚洲va欧美va久久| 韩国精品久久久| 99久久综合国产精品| 欧美日韩精品欧美日韩精品| 精品久久久久久无| 国产精品成人免费| 亚洲国产aⅴ成人精品无吗| 美女被吸乳得到大胸91| 成人自拍视频在线| 欧美日韩国产综合一区二区| 日韩午夜中文字幕| 中文字幕一区在线观看视频| 亚洲不卡一区二区三区| 国内精品写真在线观看| 色偷偷久久人人79超碰人人澡| 欧美一级一级性生活免费录像| 欧美国产激情一区二区三区蜜月| 亚洲一卡二卡三卡四卡五卡| 久久国产精品一区二区| 96av麻豆蜜桃一区二区| 欧美一区二区三级| 中文字幕在线不卡一区二区三区 | 三级欧美在线一区| 国产精品夜夜爽| 欧美日韩国产电影| 国产人成亚洲第一网站在线播放| 亚洲国产欧美日韩另类综合| 国产一区二区三区美女| 欧美羞羞免费网站| 久久久蜜桃精品| 午夜私人影院久久久久| 国产成人亚洲精品青草天美| 欧美日韩另类国产亚洲欧美一级| 国产日韩视频一区二区三区| 亚洲va欧美va天堂v国产综合| 国产成人综合在线| 69久久99精品久久久久婷婷 | 五月天视频一区| jizz一区二区| 精品对白一区国产伦| 亚洲午夜久久久久久久久久久| 国产乱码精品1区2区3区| 欧美日韩国产欧美日美国产精品| 欧美经典一区二区三区| 日韩国产精品大片| 99re这里都是精品| 久久久久久久久99精品| 首页国产丝袜综合| 色婷婷综合在线| 国产精品天天看| 精品午夜久久福利影院| 欧美日韩精品是欧美日韩精品| 中文字幕亚洲一区二区va在线| 精品在线亚洲视频| 欧美久久久久久久久| 伊人开心综合网| 成人av中文字幕| 国产午夜精品一区二区三区嫩草| 青青草国产精品亚洲专区无| 欧美这里有精品| 亚洲欧洲日韩av| 成人免费电影视频| 久久影院午夜论| 美国一区二区三区在线播放| 欧美日韩在线直播| 亚洲乱码精品一二三四区日韩在线| 国产精品夜夜嗨| 2020国产精品| 麻豆精品一区二区三区| 欧美日韩视频在线第一区 | 久久99国产精品久久| 91精品国产品国语在线不卡|