ThinkPHP3.1.3源码分析(四) Think.class.php

来源:互联网 发布:软件企业简介 编辑:程序博客网 时间:2024/03/29 16:51

一开始的ThinkPHP.php 最后一行代码 就是 Think::start(); 

调用了 Think.class.php 的 start()方法

static public function start() {        // 设定错误和异常处理        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();         // 预编译项目        //[/RUNTIME]        // 运行应用        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 ;            }        }
节选代码,主要的写法 就是 根据类名的后缀 如 abcBehavior 这搜索默认Behavior的文件夹里 有没有对应的类文件
找到了 就return

没有找到,则

 // 根据自动加载路径设置进行尝试搜索        $paths  =   explode(',',C('APP_AUTOLOAD_PATH'));        foreach ($paths as $path){            if(import($path.'.'.$class))                // 如果加载类成功则返回                return ;        }


3、编译项目

其实即使将 runtime.php 流程中定义的常量和应用的文件 都包含在了一个文件中 ~runtime.php

这样可以加快运行速度,减少io开销

0 0