ThinkPHP3.1.3原始碼分析(一) 入口檔案分析
前言:
有幾個月時間沒有更新CSDN部落格,持之以恆的徽章也滅了,接下來這個幾個月會
逐漸更新 主流PHP框架的入門,原始碼分析,框架對比。加油!
一、示例程式碼
//檔案路徑 ThinkPHP/ThinkPHP.php
// ThinkPHP 入口檔案
// 記錄開始執行時間
$GLOBALS['_beginTime'] = microtime(TRUE);
// 記錄記憶體初始使用
define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage();
// 系統目錄定義
defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__).'/');/*ThinkPHP 檔案目錄*/
defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/');/*專案檔案目錄*/
defined('APP_DEBUG') or define('APP_DEBUG',false); // 是否除錯模式
if(defined('ENGINE_NAME')) { /*是否啟用雲引擎 eg:BAE,SAE*/
defined('ENGINE_PATH') or define('ENGINE_PATH',THINK_PATH.'Extend/Engine/');
require ENGINE_PATH.strtolower(ENGINE_NAME).'.php';
}else{
defined('RUNTIME_PATH') or define('RUNTIME_PATH',APP_PATH.'Runtime/');/*執行時檔案目錄*/
/*執行時檔名(MODE_NAME 為ThinkPHP的執行模式擴充套件)
eg: 簡潔模式
精簡模式
命令模式
AMF模式
PHPRPC模式
REST模式
自定義模式擴充套件
詳情親看 ThinkPHP文件 模式擴充套件
*/
$runtime = defined('MODE_NAME')?'~'.strtolower(MODE_NAME).'_runtime.php':'~runtime.php';
defined('RUNTIME_FILE') or define('RUNTIME_FILE',RUNTIME_PATH.$runtime); /*執行時檔案*/
if(!APP_DEBUG && is_file(RUNTIME_FILE)) {
// 部署模式直接載入執行快取
require RUNTIME_FILE;
}else{
// 載入執行時檔案
require THINK_PATH.'Common/runtime.php';
}
}
備註:每一行都有註釋 // 開頭的是 官方註釋,/**/為我自己的註釋
一、介紹:
在專案的index.php檔案中,引用ThinkPHP.php檔案,就正式啟用的ThinkPHP框架
二、程式碼作用
1.定義了系統目錄
2.判斷系統是否啟用 執行模式擴充套件 ,是否啟用雲引擎
3.載入 執行時檔案runtime.php
runtime檔案的載入規則
a.除錯模式(APP_DEBUG=true)下,每次都會載入 Common/runtime.php檔案
b.其他模式下會判斷是否存在 runtime.php的快取檔案, 存在著直接載入快取檔案,
開啟了執行模式擴充套件,快取檔名為 模式副檔名_runtime.php
未開啟著為 ~runtime.php這個是最常見的,執行模式擴充套件基本不用
三、值得說的程式設計小細節:
1. defined(***) or define(***) 語句
在平常的程式設計中,一般採用
if(!defined(***))
{
define(***);
}
相關文章
- vue原始碼分析系列之入口檔案分析Vue原始碼
- 入口檔案開始,分析Vue原始碼實現Vue原始碼
- Yii2原始碼分析(一):入口原始碼
- jQuery 原始碼分析第一篇之入口原始碼jQuery原始碼
- ThinkPHP3.1.3原始碼分析(五) App.class.phpPHP原始碼APP
- ThinkPHP3.1.3原始碼分析(三) common.phpPHP原始碼
- ThinkPHP3.1.3原始碼分析(四) Think.class.phpPHP原始碼
- ThinkPHP3.1.3原始碼分析(二) runtime.phpPHP原始碼
- Django原始碼分析之執行入口Django原始碼
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(9)-入口分析原始碼
- Tomcat詳解系列(3) - 原始碼分析準備和分析入口Tomcat原始碼
- open-ethereum-pool以太坊礦池原始碼分析(1)-main入口分析原始碼AI
- 深度 Mybatis 3 原始碼分析(一)SqlSessionFactoryBuilder原始碼分析MyBatis原始碼SQLSessionUI
- 專案中常用的 .env 檔案原理原始碼分析原始碼
- EventBus原始碼分析(一):入口函式提綱挈領(2.4版本)原始碼函式
- Springboot 載入配置檔案原始碼分析Spring Boot原始碼
- 鴻蒙輕核心原始碼分析:檔案系統LittleFS鴻蒙原始碼
- 【Spring原始碼分析】配置檔案讀取流程Spring原始碼
- MyBatis原始碼分析(一)MyBatis原始碼
- preact原始碼分析(一)React原始碼
- Redux原始碼分析(一)Redux原始碼
- RecyclerView 原始碼分析(一)View原始碼
- AFL原始碼分析(一)原始碼
- 原始碼分析一:EventBus原始碼
- Backbone原始碼分析(一)原始碼
- Cobar 原始碼分析(一)原始碼
- YYCache 原始碼分析(一)原始碼
- Retrofit原始碼分析三 原始碼分析原始碼
- PHP檔案上傳原始碼分析(RFC1867)PHP原始碼
- DISCUZ原始碼分析流程詳細介紹【admin.php入口】原始碼PHP
- 精盡MyBatis原始碼分析 - SqlSession 會話與 SQL 執行入口MyBatis原始碼SQLSession會話
- 原始碼|jdk原始碼之HashMap分析(一)原始碼JDKHashMap
- Hadoop3.2.1 【 HDFS 】原始碼分析 : 檔案系統資料集 [一]Hadoop原始碼
- 集合原始碼分析[2]-AbstractList 原始碼分析原始碼
- 集合原始碼分析[1]-Collection 原始碼分析原始碼
- 集合原始碼分析[3]-ArrayList 原始碼分析原始碼
- Guava 原始碼分析之 EventBus 原始碼分析Guava原始碼
- LinkedList原始碼分析(一)原始碼