久久全球大尺度高清视频_亚洲国产一区二区在线_久久国产精品一区二区三区_久久久一二三

淺談 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.88992208.com All Rights Reserved 財經新聞網 版權所有 京ICP備12018864號-1

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

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

營業執照公示信息

 

久久全球大尺度高清视频_亚洲国产一区二区在线_久久国产精品一区二区三区_久久久一二三
1024亚洲合集| 自拍偷拍国产亚洲| 欧美经典一区二区| 久久66热偷产精品| 精品久久久三级丝袜| 韩日欧美一区二区三区| 日韩精品一区二区三区四区视频| 日韩专区在线视频| 337p亚洲精品色噜噜噜| 日本va欧美va欧美va精品| 欧美日韩精品免费| 日韩av在线发布| 精品国产乱码久久久久久老虎| 国产在线国偷精品产拍免费yy| 久久久精品日韩欧美| 成人教育av在线| 亚洲欧美国产三级| 91精品欧美综合在线观看最新| 久久疯狂做爰流白浆xx| 国产午夜精品久久久久久久| 972aa.com艺术欧美| 视频一区中文字幕| 中文字幕精品一区二区精品绿巨人 | 亚洲色图视频网| 欧美另类高清zo欧美| 激情国产一区二区| 亚洲六月丁香色婷婷综合久久| 7777精品伊人久久久大香线蕉 | 懂色中文一区二区在线播放| 亚洲免费av高清| 日韩视频一区二区三区在线播放 | 另类专区欧美蜜桃臀第一页| 国产日韩av一区二区| 色嗨嗨av一区二区三区| 精品在线播放免费| 亚洲精品乱码久久久久久黑人| 欧美大片在线观看一区| 91久久精品一区二区二区| 国产老女人精品毛片久久| 一区二区三区免费看视频| 久久综合资源网| 欧美日韩大陆一区二区| 99国产一区二区三精品乱码| 久久97超碰国产精品超碰| 亚洲一区欧美一区| 国产精品初高中害羞小美女文| 欧美一级日韩不卡播放免费| 色偷偷久久一区二区三区| 国产成人av自拍| 久久精品99国产精品| 亚欧色一区w666天堂| 亚洲欧美综合在线精品| 久久精品视频在线免费观看| 欧美一区2区视频在线观看| 在线免费视频一区二区| 99国产精品国产精品久久| 岛国一区二区在线观看| 狠狠色狠狠色综合系列| 蜜桃免费网站一区二区三区| 亚洲成av人片在www色猫咪| 亚洲精品视频在线观看免费 | 久久综合久久99| 欧美一级电影网站| 91精品国产综合久久精品| 91福利视频在线| 91精品福利在线| 91国产精品成人| 91成人在线精品| 欧美手机在线视频| 欧美日韩精品一区二区三区 | 日韩电影一区二区三区| 午夜精品国产更新| 丝袜美腿亚洲一区| 免费观看在线综合| 美国欧美日韩国产在线播放| 久热成人在线视频| 久久99精品国产.久久久久久| 美女视频一区在线观看| 久久国产综合精品| 国产综合色产在线精品| 国产成人av自拍| 波多野结衣精品在线| 91视频你懂的| 欧美欧美午夜aⅴ在线观看| 欧美一区二区三区精品| 精品理论电影在线| 国产精品家庭影院| 一区二区三区在线高清| 午夜精品123| 国产永久精品大片wwwapp | 国产乱人伦偷精品视频不卡| av一区二区三区四区| 欧美伊人久久久久久午夜久久久久| 欧美日韩一区二区三区高清| 欧美一区二区三区视频免费播放| 欧美精品一区二区久久久| 中文字幕不卡在线观看| 亚洲精品免费一二三区| 麻豆国产精品视频| 91一区一区三区| 欧美成人免费网站| 亚洲欧美日韩国产手机在线| 蜜臀精品一区二区三区在线观看| 国产高清不卡一区| 欧美日韩的一区二区| 久久久精品国产免费观看同学| 欧美高清在线精品一区| 天天av天天翘天天综合网色鬼国产| 国产真实精品久久二三区| 在线视频国内一区二区| 国产亚洲成年网址在线观看| 亚洲国产你懂的| www.亚洲国产| 精品国产a毛片| 亚洲一区二区三区四区在线免费观看| 狠狠色丁香婷综合久久| 欧美日韩国产综合一区二区 | 一区二区在线观看视频| 激情文学综合网| 欧美日韩久久不卡| 综合久久综合久久| 国产在线精品免费| 欧美一区二区成人| 亚洲成人综合在线| 91日韩精品一区| 国产免费观看久久| 国内成人精品2018免费看| 欧美日韩精品免费| 亚洲黄色小说网站| 成人精品国产免费网站| 久久色.com| 久久99国产精品免费网站| 91麻豆精品国产| 亚洲成人动漫在线观看| 色综合天天天天做夜夜夜夜做| 欧美激情一区三区| 国产成人综合网| 国产夜色精品一区二区av| 久99久精品视频免费观看| 91精品国模一区二区三区| 亚洲成人手机在线| 欧美人伦禁忌dvd放荡欲情| 亚洲成av人片一区二区三区| 欧美无砖砖区免费| 亚洲成av人片一区二区梦乃 | 色视频一区二区| 一区二区三区国产精华| 色呦呦日韩精品| 一区二区三区在线视频免费观看| 91亚洲精品久久久蜜桃网站| 亚洲三级电影全部在线观看高清| 99re成人精品视频| 亚洲图片欧美视频| 91精品国产日韩91久久久久久| 日韩有码一区二区三区| 欧美videossexotv100| 国产一区二区三区精品视频| 国产欧美日韩视频在线观看| 成人听书哪个软件好| 亚洲精品久久久蜜桃| 欧美日韩精品一区二区三区蜜桃| 首页亚洲欧美制服丝腿| 精品久久久久av影院| 国产成人鲁色资源国产91色综 | 夜夜精品视频一区二区| 欧美电影一区二区| 国产综合色产在线精品| 国产精品人成在线观看免费| 色妞www精品视频| 日韩成人免费看| 国产日韩成人精品| 日本韩国欧美一区| 久久激五月天综合精品| 亚洲欧洲成人av每日更新| 欧美人妇做爰xxxⅹ性高电影| 精品一区二区免费| 亚洲欧美另类小说| 精品免费视频一区二区| 91久久人澡人人添人人爽欧美 | 亚洲欧美乱综合| 欧美电影免费观看高清完整版在线| 韩国成人在线视频| 亚洲综合一区二区| 精品成人一区二区三区四区| 99久久久久久99| 久久精品国产亚洲5555| 日韩久久一区二区| 欧美www视频| 欧美日韩免费视频| 成人福利视频在线| 麻豆极品一区二区三区| 亚洲人成网站影音先锋播放| 日韩欧美黄色影院| 欧美午夜在线一二页| 国产+成+人+亚洲欧洲自线| 日日欢夜夜爽一区| 一区二区三区中文字幕电影 | 蜜桃一区二区三区四区| 亚洲永久精品国产| 最新欧美精品一区二区三区|