DIY 实现 ThinkPHP 核心框架(七)定义框架
之前完成了一个 MVC 开发模式的 PHP 项目实验,现开始编写框架。仿 ThinkPHP 进行目录划分。
application 应用程序目录
config 配置文件目录
extend 扩展类库目录
public 对外入口目录
route 路由目录
runtime 运行时目录
core 框架核心目录(相当于 5 的 thinkphp 和 6 的 topthink 目录)
vendor 第三方类库目录
本实验中创建 core/src/think
相当于 ThinkPHP 5 的 thinkphp/library/think
以及 ThinkPHP 6 的 /framwork/src/think
。
自动加载
修改自动配置文件 composer.json
,执行 composer update
。
{
"autoload": {
"psr-4": {"app\\": "application/", "think\\": "core/src/think"}
}
}
ThinkPHP 中是通过 Loader.php
类引入 vendor/autoload.php
,而不是在之前的项目实验中直接在入口文件导入。在 core/src/think
目录中创建 Loader.php
类文件。
namespace think;
class Loader
{
public static function register()
{
require __DIR__ . '/../../../vendor/autoload.php';
}
}
编写框架基础文件 core/base.php
引入 Loader
类。
namespace think;
require __DIR__ . '/src/think/Loader.php';
Loader::register();
删除 /public/index.php
文件原来所有代码,在框架中实现所有功能,入口文件只需引入框架基础文件即可。
require __DIR__ . '/../core/base.php';
创建 application/index/controller/Index.php
文件用于测试。
namespace app\index\controller;
class Index
{
public function index()
{
echo '#################################' . '<br />';
echo '#################################' . '<br />';
echo '#################################' . '<br />';
echo '######CONTROLLER===>Index########' . '<br />';
echo '#################################' . '<br />';
echo '#################################' . '<br />';
echo '#################################' . '<br />';
}
}
在 public/index.php
编写代码测试
$index = new \app\index\controller\Index;
$index->index();
成功打印
#################################
#################################
#################################
######CONTROLLER===>Index########
#################################
#################################
#################################
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: