理解Flight框架核心

http://blog.csdn.net/sky_zhe/article/details/38906689

Flight 框架

 

Flight类

1、加载 autoload.php ,启动框架的自动加载机制

实际执行的是 Loader::autoload 函数, 关键代码

$class_file = str_replace(array('\\', '_'), '/', $class).'.php';

可以看到是依据PSR-0标准来做的,_ 也被转化为目录

另外同时定义了,根目录是项目根目录

2、启动 Engine.php 

 使用 __callStatic 函数将对调用转到 Engine 类上:

return \flight\core\Dispatcher::invokeMethod(array(self::$engine, $name), $params); 

 

Engine类

1、首先是个容器

    protected $vars; //变量
    protected $loader; //
    protected $dispatcher; //函数或方法,(称为事件)

对变量的储存和使用,是通过 has,get,set,clear 等方法

 

2、对类(component)的管理,通过 Loader 类

Loader 通过 register 方法注册类及加载方法,通过 load 方法加载(实现了单例模式)

框架本身已经实现了 request,response,router和view等类

也可以使用Engine的register 方法添加自定义的类

 

3、对事件(函数或方法)的调用,通过 Dispatcher 类

对函数或方法命名,定义一个事件

Dispatcher 通过 set 注册事件,通过 run 执行事件,

重要的是可以hook一个事件,

也就是在事件被实际调用(execute)前后,调用(filter)自定义函数

(最后执行函数的是callFunction,方法的是invokeMethod)

框架本身定义了多个事件:

start 是框架开始执行,stop 是结束,route是添加路由,还用redirect等等

render是显示页面,json,jsonp等等

这些事件的实际执行代码也在Engine类中(以_开头)

可以用map添加自定义事件,用before,after分别hook事件前后

 

4、类和事件的调用

如上,类和事件管理在Loader 和 Dispatcher 中,但调用还是通过Engine类

注意:因为是通过 __call 实现的,所以类也是通过调用方法实现的:

    $request = $this->request();
    $response = $this->response();
    $router = $this->router();

另外,变量要通过 get 调用

 

5、错误处理 handleErrors 和 配置

通过 set_error_handler 和set_exception_handler 设置自定义错误处理代替php默认的处理,也是php框架的标配了。

配置 就保存在 Engine 类的vars 里面,可以通过 set,get方法处理

 

上述Engine类中,用来管理变量,类或事件的方法,如 set,get,register,map,before,after 就是所谓核心方法,

而注册到 Dispatcher中的事件,其实也是函数,也是在 Engine中实现的,称为扩展方法,扩展方法都是可以被hook,甚至替代的。

 

你可能感兴趣的:(理解Flight框架核心)