1、生命週期: php
2、入口文件html
thinkphp使用單一入口,全部的請求都從默認的index.php文件進入。你還能夠建立多個應用,一個應用對應一個入口文件,全部的入口文件都引用一套thinkphp類庫。linux
// 定義應用目錄 define('APP_PATH', __DIR__ . '/../application/'); // 加載框架引導文件 require __DIR__ . '/../thinkphp/start.php';
第一行代碼 定義了應用的默認目錄;nginx
第二行代碼是咱們下面要看的引導文件thinkphp
注意:官方不建議在應用入口文件中加入過多的代碼,尤爲是和業務邏輯相關的代碼。apache
3、引導文件php框架
start.php文件就是系統默認的一個引導文件。在引導文件中,會依次執行下面操做:服務器
加載系統常量定義-->加載環境變量定義文件-->註冊自動加載機制-->註冊錯誤和異常處理機制-->加載慣例配置文件-->執行應用app
// ThinkPHP 引導文件 // 1. 加載基礎文件 require __DIR__ . '/base.php'; // 2. 執行應用 App::run()->send();
start.php引導文件首先會調用base.php基礎引導文件,某些特殊需求下面可能直接在入口文件中引入基礎引導文件。框架
define('THINK_VERSION', '5.0.23'); // 版本信息 define('THINK_START_TIME', microtime(true)); // 記錄開始運行時間 define('THINK_START_MEM', memory_get_usage()); // 記錄內存初始使用 define('EXT', '.php'); // 類文件後綴 define('DS', DIRECTORY_SEPARATOR); defined('THINK_PATH') or define('THINK_PATH', __DIR__ . DS); //定義當前入口文件所在的目錄,即thinkphp框架的目錄 define('LIB_PATH', THINK_PATH . 'library' . DS); // lib所在目錄 define('CORE_PATH', LIB_PATH . 'think' . DS); // 核心文件所在目錄 define('TRAIT_PATH', LIB_PATH . 'traits' . DS); defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS); defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) . DS); defined('EXTEND_PATH') or define('EXTEND_PATH', ROOT_PATH . 'extend' . DS); defined('VENDOR_PATH') or define('VENDOR_PATH', ROOT_PATH . 'vendor' . DS); defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS); defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS); defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' . DS); defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' . DS); defined('CONF_PATH') or define('CONF_PATH', APP_PATH); // 配置文件目錄 defined('CONF_EXT') or define('CONF_EXT', EXT); // 配置文件後綴 defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 環境變量的配置前綴 /** * 環境常量 * php判斷解析php服務是由那種服務器軟件,是採用那種協議,PHP_ASPI是一個能夠直接使用的常量。 * 若是是nginx+fastcgi環境,那麼它的值是cgi-fcgi * 若是是apache環境,那麼他的值是apache2handler * 若是是命令行的形式,那麼它的值是cli * PHP_OS PHP所在的操做系統的名字,例如linux和WIN。 * 充分理解php的各類運行模式,參看: * http://www.jb51.net/article/37756.htm * http://www.cnblogs.com/liuzhang/p/3929198.html */ define('IS_CLI', PHP_SAPI == 'cli' ? true : false); define('IS_WIN', strpos(PHP_OS, 'WIN') !== false); // 載入Loader類 require CORE_PATH . 'Loader.php'; // 加載環境變量配置文件 if (is_file(ROOT_PATH . '.env')) { $env = parse_ini_file(ROOT_PATH . '.env', true); foreach ($env as $key => $val) { $name = ENV_PREFIX . strtoupper($key); if (is_array($val)) { foreach ($val as $k => $v) { $item = $name . '_' . strtoupper($k); putenv("$item=$v"); } } else { putenv("$name=$val"); } } } /** * 註冊自動加載 * 系統的自動加載由下面主要部分組成: * 一、註冊系統的自動加載方法 \think\Loader::autoload * 二、註冊系統命名空間定義 * 三、加載類庫映射文件(若是存在) * 四、若是存在Composer安裝,則註冊**Composer**自動加載 * 五、註冊extend擴展目錄 */ \think\Loader::register(); /** * 註冊錯誤和異常處理機制 由三部分組成: * 1.應用關閉方法:think\Error::appShutdown * 2.錯誤處理方法:think\Error::appError * 3.異常處理方法:think\Error::appException */ \think\Error::register(); // 加載慣例配置文件 \think\Config::set(include THINK_PATH . 'convention' . EXT);