亚洲欧美乱综合_91国在线精品国内播放_久久久久北条麻妃免费看_97久久超碰精品国产_91精品视频在线播放_国产偷亚洲偷欧美偷精品_经典三级在线一区_国产在线一区二区_国产欧美精品一区二区三区四区_国产999在线观看

淺談 thinkphp composer 擴展包加載原理 環球視訊

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

如題,今天感覺好久沒有更新博客了。最近迷上了物聯網開發。一直在研究stm32、51這些東西。想起來前幾天群里面有人問到tp擴展包原理。其實這個前幾年也就研究過。網上搜了搜發現相關文章也很少(也有可能是我搜索姿勢不對)今天就來寫一篇thinkphp composer包加載原理

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

在第三步進入到Http->runWithRequest這個方法中后。可以看到又調用了initialize方法

追進這個方法可以看到


(資料圖片)

追進initialize方法看實現

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

重點是初始化當前系統配置的默認服務這個$this->make($initializer)->init($this)函數,看看initializers屬性

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

追到這里就是關鍵了。上面把這里面的類進行初始化。并且執行類中的init方法。直接看RegisterService::class類的init方法

public function init(App $app)    {        // 獲取當前項目根目錄。拼接上 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);            }        }    }

讀到這里的可以看看自己項目vendor目錄下是不是有一個services.php,接下來講一講composer.json這個文件在tp框架中的composer.json有這樣一個配置

這里這個概念我直接讓chatgpt來解讀。解讀內容如下

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

public function execute(Input $input, Output $output)    {        // 獲取到當前項目根目錄下的 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) {                // 判斷當前包是否在extra字段里面聲明了think關鍵字中的services屬性。如果聲明了就把services給裝載到services變量內                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函數把services變量打印成可讀性代碼。并且寫入到根目錄vendor目錄下的services            $content = "app->getRootPath() . "vendor/services.php", $content);            $output->writeln("Succeed!");        }

一直到這就算結束了

寫在最后

如果覺得這篇文章對你有幫助。不妨點個贊留個關注再走

標簽:

來源:博客園
0
上一篇:貴陽香菇肉丁最正宗的做法?_今日熱文 下一篇:最后一頁

  Copyright @ 2001-2013 www.aichatbotapp.net All Rights Reserved 財經新聞網 版權所有 京ICP備12018864號-1

  網站所登新聞、資訊等內容, 均為相關單位具有著作權,轉載請注明出處

  未經彩迅新聞網書面授權,請勿建立鏡像 聯系我們:  291 32 36@qq.com

營業執照公示信息

 

亚洲欧美乱综合_91国在线精品国内播放_久久久久北条麻妃免费看_97久久超碰精品国产_91精品视频在线播放_国产偷亚洲偷欧美偷精品_经典三级在线一区_国产在线一区二区_国产欧美精品一区二区三区四区_国产999在线观看
欧美日韩国产小视频| 国产最新精品精品你懂的| 久久精品免费看| 亚洲成人激情自拍| 午夜影院久久久| 国产精品每日更新在线播放网址| 亚洲综合免费观看高清完整版在线 | 国产欧美精品一区| 亚洲综合在线观看视频| 国产精品亚洲一区二区三区在线 | 丁香婷婷综合色啪| 欧美色视频在线观看| 欧美日韩一级大片网址| 日韩三级在线免费观看| 欧美自拍丝袜亚洲| 欧美一区二区免费| 国产精品麻豆99久久久久久| 亚洲欧美国产毛片在线| 亚洲v日本v欧美v久久精品| 日韩久久一区二区| 日本午夜精品视频在线观看 | 欧美日韩1234| 久久亚区不卡日本| 国产成人a级片| 亚洲欧美日韩国产综合在线 | 国产精品亚洲午夜一区二区三区| 国产偷v国产偷v亚洲高清| 九色综合国产一区二区三区| 国产成人在线视频网站| 欧美v国产在线一区二区三区| 日韩一区二区三区精品视频| 欧美精品一区二区久久婷婷| 亚洲国产日日夜夜| 91免费版在线看| 亚洲在线中文字幕| 日韩欧美国产一区二区在线播放| 国产91高潮流白浆在线麻豆| 18涩涩午夜精品.www| 中文字幕欧美日本乱码一线二线 | 国产激情偷乱视频一区二区三区| 欧美精品一区二区蜜臀亚洲| 欧美三级电影网| 成人av电影观看| 欧美私人免费视频| 国产精品一二一区| 91丨九色丨尤物| 亚洲欧美一区二区三区孕妇| 欧美久久久一区| 日本久久精品电影| 欧美精品在线一区二区三区| 亚洲高清一区二区三区| 5566中文字幕一区二区电影 | 国产精品成人在线观看| 欧美一区二区免费| 精品少妇一区二区三区免费观看 | 久久中文娱乐网| 国产 欧美在线| 一区二区不卡在线视频 午夜欧美不卡在| 国产亚洲欧美在线| 欧美日韩国产一二三| 国产一区 二区| 成人精品小蝌蚪| 天天影视色香欲综合网老头| 香蕉影视欧美成人| 6080午夜不卡| av综合在线播放| 国产精一品亚洲二区在线视频| 亚洲综合在线免费观看| 久久精品国产精品亚洲综合| 麻豆精品一区二区三区| 日韩一区二区在线免费观看| 国产农村妇女精品| 777欧美精品| 国产一区二区不卡| 亚洲精品在线三区| 亚洲成人免费av| 精品一区二区av| 白白色 亚洲乱淫| 欧美高清hd18日本| 在线欧美小视频| 久久色成人在线| 中文乱码免费一区二区| 一区二区视频在线| 亚洲第一在线综合网站| 欧美精选午夜久久久乱码6080| 欧美日韩视频在线观看一区二区三区| 久久精品噜噜噜成人av农村| 久久久国产综合精品女国产盗摄| 国产网站一区二区| 国产综合久久久久久久久久久久 | 在线免费观看视频一区| 午夜一区二区三区视频| 国产日本欧美一区二区| 日韩不卡手机在线v区| 亚洲男同1069视频| 国产一区二区精品久久| 欧美日韩一级黄| 国产精品全国免费观看高清| 蜜臀久久99精品久久久画质超高清| 加勒比av一区二区| 日韩视频免费观看高清完整版| 国产精品高潮呻吟久久| 成人avav影音| 国产老妇另类xxxxx| 精品免费国产二区三区| 91丨porny丨户外露出| 久久av老司机精品网站导航| 国产精品一级片在线观看| 91精品久久久久久久久99蜜臂| 日韩精品电影一区亚洲| 亚洲成av人影院| 亚洲免费观看视频| 亚洲午夜在线视频| 一本色道久久综合亚洲精品按摩 | 中文字幕永久在线不卡| 精品粉嫩aⅴ一区二区三区四区 | 久久精品国产亚洲a| 调教+趴+乳夹+国产+精品| 91精品国产91综合久久蜜臀| 欧美精品色一区二区三区| 精品夜夜嗨av一区二区三区| 在线观看区一区二| 国产成人精品影视| 日韩欧美亚洲一区二区| 精品第一国产综合精品aⅴ| 欧美美女喷水视频| 欧美一级免费大片| 国产精品18久久久久| 久久伊人中文字幕| 亚洲国产综合91精品麻豆| 国产成人在线观看免费网站| 成人激情校园春色| 在线电影欧美成精品| 一本高清dvd不卡在线观看| 中文字幕一区二区三区在线播放| caoporn国产精品| 精品久久一区二区三区| 免费人成精品欧美精品| 亚洲激情欧美激情| 欧美在线制服丝袜| 9i看片成人免费高清| 日韩电影在线免费观看| 欧美艳星brazzers| 亚洲国产精品一区二区久久恐怖片| 国产久卡久卡久卡久卡视频精品| 欧美va亚洲va香蕉在线| 亚洲自拍偷拍av| 综合激情成人伊人| 精品日韩在线观看| 欧美日韩在线三级| 国产成人精品一区二区三区四区| 国产精品三级久久久久三级| 欧美一区二区三级| 欧美一区二区三区成人| 色综合天天天天做夜夜夜夜做| 亚洲欧美一区二区三区国产精品 | 精品一区二区三区av| 国内久久精品视频| 一本一道久久a久久精品| 色系网站成人免费| 精品福利一区二区三区| 自拍偷拍亚洲激情| 色嗨嗨av一区二区三区| 日韩精品一区二区在线| 日韩精品电影一区亚洲| 欧美亚一区二区| av色综合久久天堂av综合| 欧美日韩久久一区| 国产精品久久久久久妇女6080| 成人晚上爱看视频| 亚洲午夜一区二区三区| 一本大道综合伊人精品热热| 丝袜亚洲另类欧美| 精品国产乱码久久久久久免费 | 精品欧美一区二区三区精品久久| 欧美一二三区在线| 日韩av高清在线观看| 男人的j进女人的j一区| 国产欧美日韩综合| 另类小说综合欧美亚洲| 成人黄色在线视频| 欧美一区日韩一区| 蜜桃av一区二区| 欧美三级中文字| 久久夜色精品一区| 国内精品久久久久影院色| 91精品国产欧美一区二区| 国产色一区二区| av一区二区久久| 久久久久久久久久久久久久久99| 久色婷婷小香蕉久久| 在线观看免费视频综合| 亚洲精品国产视频| av激情综合网| 国产做a爰片久久毛片| 日韩欧美的一区二区| 青青国产91久久久久久| www国产成人| 91啪在线观看| 丝袜美腿高跟呻吟高潮一区|