PHP框架解析之從入口說起index.php
阿新 • • 發佈:2019-01-24
<?php
header("Content-type:application/json;charset=utf-8");
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT ^ E_WARNING);
ini_set("display_errors", "On");
define("ROOT_DIR", dirname(__FILE__));
define("DS", DIRECTORY_SEPARATOR);
define("CORE_DIR", ROOT_DIR . DS . 'framework' );
require_once ROOT_DIR . DS . 'stdafx.php';
require_once CORE_DIR . DS . 'Core.php';
try {
$core = Core::getInstance()->boot(ROOT_DIR . '/config/core.php');//->run();
$core->registerPlugin(new LoginPlugin());
$core->run();
} catch (Exception $ex) {
echo json_encode(array('NOT FOUND'));
print $ex;
die;
}
1、Http header設定Content-type
2、ini_set(“display_errors”, “On”)開啟報錯機制,error_reporting() 設定 PHP 的報錯級別
值 | 常量 | 描述 |
---|---|---|
1 | E_ERROR | 致命的執行錯誤。錯誤無法恢復,暫停執行指令碼。 |
2 | E_WARNING | 執行時警告(非致命性錯誤)。非致命的執行錯誤,指令碼執行不會停止。 |
4 | E_PARSE | 編譯時解析錯誤。解析錯誤只由分析器產生。 |
8 | E_NOTICE | 執行時提醒(這些經常是你程式碼中的bug引起的,也可能是有意的行為造成的。 |
16 | E_CORE_ERROR | PHP啟動時初始化過程中的致命錯誤。 |
32 | E_CORE_WARNING | PHP啟動時初始化過程中的警告(非致命性錯)。 |
64 | E_COMPILE_ERROR | 編譯時致命性錯。這就像由Zend指令碼引擎生成了一個E_ERROR。 |
128 | E_COMPILE_WARNING | 編譯時警告(非致命性錯)。這就像由Zend指令碼引擎生成了一個E_WARNING警告。 |
256 | E_USER_ERROR | 使用者自定義的錯誤訊息。這就像由使用PHP函式trigger_error(程式設計師設定E_ERROR) |
512 | E_USER_WARNING | 使用者自定義的警告訊息。這就像由使用PHP函式trigger_error(程式設計師設定的一個E_WARNING警告) |
1024 | E_USER_NOTICE | 使用者自定義的提醒訊息。這就像一個由使用PHP函式trigger_error(程式設計師一個E_NOTICE集) |
2048 | E_STRICT | 編碼標準化警告。允許PHP建議如何修改程式碼以確保最佳的互操作性向前相容性。 |
4096 | E_RECOVERABLE_ERROR | 開捕致命錯誤。這就像一個E_ERROR,但可以通過使用者定義的處理捕獲 |
8191 | E_ALL | 所有的錯誤和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0) |
3、獲取當前檔案絕對路徑 dirname(FILE)
4、引入檔案stdafx.php和Core.php
stdafx.php主要作用是定義常量和引入相關php檔案:
<?php
date_default_timezone_set("Asia/Chongqing");
define('CONFIG_DIR', ROOT_DIR . DS . 'config');
require_once CONFIG_DIR . '/db.php';
require_once CONFIG_DIR . '/mc.php';
...
require_once CONFIG_DIR . '/define.php';
Core.php是整個框架的核心:
- include與require : 最大區別是當檔案不是必需的,且應用程式在檔案未找到時應該繼續執行時可以使用include
- _autoload與 spl_autoload_register:在php5之後可以在index.php中通過編寫__autoload函式來讓php自動載入類,也可以使用spl_autoload_register來註冊我們自己的autoload函式來處理載入尚未定義的類
- isset與empty:
- isset:檢測變數是否設定 ,若變數不存在則返回 FALSE 若變數存在且其值為NULL,也返回 FALSE
若變數存在且值不為NULL,則返回 TURE ,同時檢查多個變數時,每個單項都符合上一條要求時才返回 TRUE,否則結果為 FALSE. - empty:檢查一個變數是否為空,若變數存在且其值為”“、0、”0”、NULL、、FALSE、array()、var $var; 以及沒有任何屬性的物件,則返回 TURE
- isset:檢測變數是否設定 ,若變數不存在則返回 FALSE 若變數存在且其值為NULL,也返回 FALSE
5、Core::getInstance()單例模式例項化Core物件,初始化autoload載入機制(自定義loadClass),boot載入控制器、模型、檢視,外掛、庫,路由規則等配置
6、註冊LoginPlugin登入外掛通過依賴注入的方式進行訪問的身份驗證檢查
7、run根據路由規則分發機制以及path_info資訊,解析出控制器類,例項化並呼叫IndexAction對請求進行處理