ThinkPHP3.1.3原始碼分析(一) 入口檔案分析

程式碼修行者發表於2014-10-28

前言:

有幾個月時間沒有更新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(***);
}


相關文章