DIY 實現 ThinkPHP 核心框架(七)定義框架

cn-five發表於2020-08-31

之前完成了一個 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 協議》,轉載必須註明作者和本文連結

相關文章