登录  注册 退出
苏杭php自学网
记录个人学习过程中碰见的问题和感受
要温柔,也要有屠龙的勇气
本站有学习资源,可自由下载学习资料
  1. 首页 > PHP自学教程 > ThinkPHP 框架

TP5.1源码从头开始研究

作者:苏杭 日期:2020-10-23 16:49:35 点击数:

tp5.1源码, 近日研究了一下 , 也颇有收获,总结一下:


1. 自动加载

首先从框架的入口文件,public 文件夹下的 index.php 入口文件 , index文件 加载了 base.php 文件,下面来看下base.php文件 

可以看到, 加载了 Loader类 , 作用:   实现了自动加载机制,  自动加载对应需要的类, 如果不存在,则去自动查找该类并引入

// 载入Loader类
       require __DIR__ . '/library/think/Loader.php';

// 注册自动加载
       Loader::register();


2.Ioc容器

接下来, base文件 加载了  Ioc容器类 , 将一些核心常用类注册到 容器类里 , 

    // 注册核心类到容器
Container::getInstance()->bind([
'app'                   => App::class,
'build'                 => Build::class,
'cache'                 => Cache::class,
'config'                => Config::class,
'cookie'                => Cookie::class,
'debug'                 => Debug::class,
'env'                   => Env::class,
'hook'                  => Hook::class,
'lang'                  => Lang::class,
'log'                   => Log::class,
'request'               => Request::class,
'response'              => Response::class,
'route'                 => Route::class,
'session'               => Session::class,
'url'                   => Url::class,
'validate'              => Validate::class,
'view'                  => View::class,

   // 接口依赖注入
'think\LoggerInterface' => Log::class,
]);


3. 门面模式 Facade

// 注册核心类的静态代理
Facade::bind([
facade\App::class      => App::class,
facade\Build::class    => Build::class,
facade\Cache::class    => Cache::class,
facade\Config::class   => Config::class,
facade\Cookie::class   => Cookie::class,
facade\Debug::class    => Debug::class,
facade\Env::class      => Env::class,
facade\Hook::class     => Hook::class,
facade\Lang::class     => Lang::class,
facade\Log::class      => Log::class,
facade\Request::class  => Request::class,
facade\Response::class => Response::class,
facade\Route::class    => Route::class,
facade\Session::class  => Session::class,
facade\Url::class      => Url::class,
facade\Validate::class => Validate::class,
facade\View::class     => View::class,
]);


4.加载配置文件

// 加载惯例配置文件
facade\Config::set(include __DIR__ . '/convention.php');



随便看看
QQ在线咨询
电话:
182 7047 6708
交流微信:
su18270476708