自學TP5原始碼(一)

2021-09-24 06:49:55 字數 2576 閱讀 8488

感覺在中國 thinkphp 在 php 框架中還是占有主導地位的。所以想透徹的理解一下這個聽說簡單易學的框架。

1.入口檔案
// 定義應用目錄

// 載入框架引導檔案

require

__dir__ . '/../thinkphp/start.php';

複製**

2. 引導檔案
namespace

think;

// thinkphp 引導檔案

// 1. 載入基礎檔案

require

__dir__ . '/base.php';

// 2. 執行應用

複製**

引入了基礎檔案,和執行了應用。 繼續看基礎檔案base.php

3. 基礎檔案

define('think_version', '5.0.20');

define('think_start_time', microtime(true));

define('think_start_mem', memory_get_usage());

define('ext', '.php');

define('ds', directory_separator);

defined('think_path') or define('think_path', __dir__ . ds);

define('lib_path', think_path . 'library' . ds);

define('core_path', lib_path . 'think' . ds);

define('trait_path', lib_path . 'traits' . ds);

defined('extend_path') or define('extend_path', root_path . 'extend' . ds);

defined('vendor_path') or define('vendor_path', root_path . 'vendor' . ds);

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('cache_path', runtime_path . 'cache' . ds);

defined('temp_path') or define('temp_path', runtime_path . 'temp' . ds);

defined('conf_ext') or define('conf_ext', ext); // 配置檔案字尾

defined('env_prefix') or define('env_prefix', 'php_'); // 環境變數的配置字首

// 環境常量

define('is_cli', php_sapi == 'cli' ? true : false);

define('is_win', strpos(php_os, 'win') !== false);

複製**

定義了很多常用的常量和配置,使用or是擔心你自行defined了,就可以優先某些使用者自己定義的。ds也是上面定義過的 相當於/

// 載入loader類

require core_path . 'loader.php';

// 載入環境變數配置檔案

if (is_file(root_path . '.env'))

} else

}}複製**

載入的loader.php後面再說。 如果根目錄有.env檔案,那麼注意函式parse_ini_file會將其那種php.ini格式的資料,變為陣列,然後存到env裡。就可以隨時隨地用env函式來獲取自己的配置。

// 註冊自動載入

\think\loader::register();

// 註冊錯誤和異常處理機制

\think\error::register();

// 載入慣例配置檔案

\think\config::set(include think_path . 'convention' . ext);

複製**

整個基礎檔案base.php就這麼多內容了。主要就是自動載入這一塊了,關注靜態方法\think\loader::register()方法

至於為什麼方法最前面的要加\, 是因為是require進來的,沒有用到自動載入,屬於基類的呼叫前面都需要加這個。

tp5原始碼學習 容器類

1.index.php呼叫 容器獲取例項,執行例項的方法2.container get public static function get abstract,vars newinstance false 3.static getinstance 單例模式 public static functio...

tp5原始碼分析之模板標籤庫

標籤庫,可以用來自定義模板檔案中的標籤解析方式 在tp5中自定義了內建標籤庫 cx.php 標籤庫建構函式,建立標籤庫物件 public function construct template 標籤庫可以用來解析模板檔案中的自定義標籤 public function parsetag content...

TP5原始碼分析前置知識 簡單工廠模式

一 白話解釋一下 所謂工廠就是為不同客戶生產不同的玩意,那麼程式裡面的工廠有著異曲同工之妙,例如你要new 車相關的類 是不是每種車要自己去new?現在我換種做法,我們把new的過程交給工廠去幹,我只要告訴你型別,你就給我new什麼。二 看看最簡單的工廠democlass carclass bike...