一、入口文件
//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)
{
...
}
}