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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!