ThinkPHP3.1.3源碼分析(四) Think.class.php
一開始的ThinkPHP.php 最后一行代碼 就是 Think::start();?
調(diào)用了 Think.class.php 的 start()方法
static?public?function?start()?{
????????//?設(shè)定錯誤和異常處理
????????register_shutdown_function(array('Think','fatalError'));
????????set_error_handler(array('Think','appError'));
????????set_exception_handler(array('Think','appException'));
????????//?注冊AUTOLOAD方法
????????spl_autoload_register(array('Think',?'autoload'));
????????//[RUNTIME]
????????Think::buildApp();?????????//?預(yù)編譯項目
????????//[/RUNTIME]
????????//?運行應(yīng)用
????????App::run();
????????return?;
????}這個類最重要的是三部分
1、注冊錯誤、異常的處理方法
register_shutdown_function、set_error_handler、set_exception_handler
2、自動加載
if(substr($class,-8)=='Behavior')?{?//?加載行為
????????????if(require_array(array(
????????????????CORE_PATH.'Behavior/'.$file,
????????????????EXTEND_PATH.'Behavior/'.$file,
????????????????LIB_PATH.'Behavior/'.$file,
????????????????$libPath.'Behavior/'.$file),true)
????????????????||?(defined('MODE_NAME')?&&?require_cache(MODE_PATH.ucwords(MODE_NAME).'/Behavior/'.$file)))?{
????????????????return?;
????????????}
????????}節(jié)選代碼,主要的寫法 就是 根據(jù)類名的后綴 如 abcBehavior 這搜索默認(rèn)Behavior的文件夾里 有沒有對應(yīng)的類文件
找到了 就return
沒有找到,則
?//?根據(jù)自動加載路徑設(shè)置進行嘗試搜索
????????$paths??=???explode(',',C('APP_AUTOLOAD_PATH'));
????????foreach?($paths?as?$path){
????????????if(import($path.'.'.$class))
????????????????//?如果加載類成功則返回
????????????????return?;
????????}3、編譯項目
其實即使將 runtime.php 流程中定義的常量和應(yīng)用的文件 都包含在了一個文件中 ~runtime.php
這樣可以加快運行速度,減少io開銷





