一、入口文件
//public/index.php
//定義應用目錄
define('APP_PATH',__DIR__.'/../application/');
//加載框架引導文件
require __dir__.'/../thinkphp/start.php';
調用thinkphp文件夾中的start.php
//thinkphp/start.php
namespace think;
//加載基礎文件
require __DIR__.'/base.php';
//執行應用
App::run()->send();
調用thinkphp文件夾中的base.php
//thinkphp/base.php
//thinkphp版本
define('THINK_VERSION','5.0.16');
//thinkphp開始的時間
define('THINK_START_TIME',microtime(true));
//當前分配給你的 PHP 腳本的內存量,單位是字節(byte)
define('THINK_START_MEM',memory_get_useage());
//文件後綴
define('EXT','.php');
//定義文件分隔符 DIRECTORY_SEPARATOR = "/"
define('DS',DIRECTORY_SEPARATOR);
//判斷think目錄是否定義
defined('THINK_PATH') or define('THINK_PATH',__DIR__.DS);
//定義lib文件夾路徑
define('LIB_PATH',THINK_PATH.'library'.DS);
//框架核心文件夾路徑
define('CORE_PATH',LIB_PATH.'think'.DS);
//trait目錄
define('TRAIT_PATH',LIB_PATH.'traits'.DS);
//判斷應用目錄是否定義 $_SERVER['SCRIPT_FILENAME']獲取前腳本絕對路徑 dirname()獲取腳本所在的文件夾
defined('APP_PATH') or define('APP_PATH',dirname($_SERVER['SCRIPT_FILENAME']).DS);
//判斷網站路徑是否定義 realpath 函數返回絕對路徑
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',ROOT_PATH.'vendor'.DS);
//runtime
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('LOG_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_');
//環境常量
define('IS_CLI',PHP_SAPI=='cli'?true:false); web服務器
define('IS_WIN',strpos(PHP_OS,'WIN') !== false); //操作系統
//載入loader類
require CORE_PATH.'loader.php';
//載入環境變量配置文件
if(is_file(ROOT_PATH.'env')){
//parse_ini_file() 載入一個由 filename指定的 ini 文件,並將其中的設置作爲一個聯合數組返回
$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::register();
//註冊錯誤和異常處理機制
\think\Error::register();
//加載慣例配置文件
\think\Config::set(include THINK_PATH.'convention'.EXT);
調用think文件夾下的Loader類
//lib/think
//自動加載
public static function autoload($class)
{
...
}
//查找文件
private static function findFile($class)
{
...
}
//註冊classmap
public static function addClassMap($class, $map = '')
{
...
}
//註冊命名空間
public static funtion addNamespace($namespace, $path = '')
{
...
}
//添加 PSR-4 空間
private static function addPsr4($prefix, $paths, $prepend = false)
{
...
}
// 註冊命名空間別名
public static function addNamespaceAlias($namespace, $original = '')
{
...
}
//註冊自動加載機制
public static function register($autoload = null)
{
...
}
//註冊composer自動加載
private static function registerComposerLoader()
{
...
}
//導入所需類庫同 Java 的 import 本函數有緩存功能
public static function import($class, $baseUrl = '', $ext = EXT)
{
...
}
//實例化 (分層)模型
public static function model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common')
{
...
}
//實例化(分層)控制器格式
public static function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '')
{
...
}
//實例化驗證類格式
public static function validate($name, $layer = 'validate', $appendSuffix = false, $common = 'common')
{
...
}
//解析模板和類名
protected static function getModuleAndClass($name, $layer, $appendSuffix)
{
...
}
//數據庫初始化,並取得數據庫類實例
public static function db($config = [], $name = false)
{
...
}
//字符串命名風格轉換
public static function parseName($name, $type = 0, $ucfirst = true)
{
...
}
// 解析應用類的類名
public static function parseClass($module, $layer, $name, $appendSuffix)
{
...
}
//初始化類的實例
public static function clearInstance()
{
...
}
//作用範圍隔離
function __include_fime($file)
{
...
}
function __require_file($file)
{
...
}
調用think文件夾下的App.php
//library/think
class APP
{
// 執行應用程序
public static function run(Request $request = null)
{
...
}
// 初始化應用,並返回配置信息
public static function initCommon()
{
...
}
//初始化應用或模塊
private static function init($module = '')
{
...
}
//設置當前請求的調度信息
public static function dispatch($dispatch, $type = 'module')
{
...
}
//執行函數或閉包方法 支持參數調用
public static function invokeFunction($function, $vars = [])
{
...
}
//調用反射執行類的方法 支持參數綁定
public static function invokeMethod($mothed, $vars = [])
{
...
}
//調用反射執行類的實例化 支持依賴注入
public static function invokeClass($class, $vars = [])
{
...
}
// 綁定參數
private static function bindParams($reflect, $vars = [])
{
...
}
// 獲取參數值
private static function getParamvalue($param, &$vars, $type)
{
...
}
// 執行調度分發
protected static function exec($dispatch, $config)
{
...
}
//執行模塊
public static function module($result, $config, $convert = null)
{
...
}
//URL 路由檢查
public static function routeCheck($request, array $config)
{
...
}
//設置應用的路由檢測機制
public static function route($route, $must = false)
{
...
}
}