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原始碼分析(一):入口原始碼
- Tomcat詳解系列(3) - 原始碼分析準備和分析入口Tomcat原始碼
- Springboot 載入配置檔案原始碼分析Spring Boot原始碼
- open-ethereum-pool以太坊礦池原始碼分析(1)-main入口分析原始碼AI
- 專案中常用的 .env 檔案原理原始碼分析原始碼
- 深度 Mybatis 3 原始碼分析(一)SqlSessionFactoryBuilder原始碼分析MyBatis原始碼SQLSessionUI
- Hadoop3.2.1 【 HDFS 】原始碼分析 : 檔案系統資料集 [一]Hadoop原始碼
- DISCUZ原始碼分析流程詳細介紹【admin.php入口】原始碼PHP
- LinkedList原始碼分析(一)原始碼
- AFNetworking 原始碼分析(一)原始碼
- MyBatis原始碼分析(一)MyBatis原始碼
- Redux原始碼分析(一)Redux原始碼
- preact原始碼分析(一)React原始碼
- AFL原始碼分析(一)原始碼
- RecyclerView 原始碼分析(一)View原始碼
- 鴻蒙輕核心原始碼分析:檔案系統LittleFS鴻蒙原始碼
- Retrofit原始碼分析三 原始碼分析原始碼
- 精盡MyBatis原始碼分析 - SqlSession 會話與 SQL 執行入口MyBatis原始碼SQLSession會話
- 原始碼|jdk原始碼之HashMap分析(一)原始碼JDKHashMap
- Fabric 1.0原始碼分析(2) blockfile(區塊檔案儲存)原始碼BloC
- Fabric 1.0原始碼分析(22)Ledger #blkstorage(block檔案儲存)原始碼BloC
- class檔案的基本結構及proxy原始碼分析二原始碼
- SpringMVC原始碼分析:POST請求中的檔案處理SpringMVC原始碼
- 集合原始碼分析[2]-AbstractList 原始碼分析原始碼
- 集合原始碼分析[3]-ArrayList 原始碼分析原始碼
- Guava 原始碼分析之 EventBus 原始碼分析Guava原始碼
- 【JDK原始碼分析系列】ArrayBlockingQueue原始碼分析JDK原始碼BloC
- 集合原始碼分析[1]-Collection 原始碼分析原始碼
- Android 原始碼分析之 AsyncTask 原始碼分析Android原始碼
- Android 原始碼分析(一)專案構建過程Android原始碼
- 《YYModel原始碼分析(一)YYClassInfo》原始碼
- DelayQueue系列(一):原始碼分析原始碼
- Volcano 原理、原始碼分析(一)原始碼
- Netty原始碼分析--NIO(一)Netty原始碼
- Kubernetes Deployment 原始碼分析(一)原始碼
- RyuBook1.0案例一:SwitchingHub專案原始碼分析原始碼
- RxJava2原始碼分析(一):基本流程分析RxJava原始碼