colaphp框架的类分析(一)

17 篇文章 0 订阅
8 篇文章 1 订阅

colaphp框架的类分析(一)

入口类Cola这里写图片描述

cola类的结构

属性分析

$_instance 单例模式,持有cola对象
$reg 存储变量和对象
$config 配置对象
$router 路由对象
$pathinfo 存储路由的路径
$dispatchInfo 存储需要加载的控制器和方法    

构造方法

1 注册默认需要的类
2 加载自动加载方法
//初始化配置类
        $this->config = new Cola_Config(array(
            '_class' => array(
                'Cola_Model'               => COLA_DIR . '/Model.php',
                'Cola_View'                => COLA_DIR . '/View.php',
                'Cola_Controller'          => COLA_DIR . '/Controller.php',
                'Cola_Router'              => COLA_DIR . '/Router.php',
                'Cola_Request'             => COLA_DIR . '/Request.php',
                'Cola_Response'            => COLA_DIR . '/Response.php',
                'Cola_Ext_Validate'        => COLA_DIR . '/Ext/Validate.php',
                'Cola_Exception'           => COLA_DIR . '/Exception.php',
                'Cola_Exception_Dispatch'  => COLA_DIR . '/Exception/Dispatch.php',
            ),
        ));
        Cola::registerAutoload();

自动加载方法loadClass( className, classFile = ”),支持按照文件和方法查找

1 看是否已经存在
2 classFile不存在,在默认的类中查找
3 如果类名字中有Cola 去掉它。例如Cola_Ext_Http类
    去掉Cola把_替换成\  xxx\Ext\Http文件
4 然后需要配置 model controller 加载对应的类

其实代码需要指定对应的controller,model,view,widget路径

   '_modelsHome'      => APP_PATH.DIRECTORY_SEPARATOR.'model',
    '_controllersHome' => APP_PATH.DIRECTORY_SEPARATOR.'controller',
    '_viewsHome'       => APP_PATH.DIRECTORY_SEPARATOR.'view',
    '_widgetsHome'     => APP_PATH.DIRECTORY_SEPARATOR.'widget'

入口代码是这么写的

//分发 CONFIG_PATH 配置路径
$cola->boot(CONFIG_PATH)->dispatch();

boot(CONFIG_PATH) 主要是加载配置文件合并配置。下面我们讲到config类的时候会做一个说明

初始化cola对象,boot配置后,我们会有一个dispatch,这个时候我们主要考虑的是加载对应的controller和action

getDispatchInfo方法是获取dispathch的

1 如果不存在dispatchInfo,实例化Router
2 获取配置里面_urls数组和router实例里面的rules合并
3 获取pathInfo,然后去router里面匹配
4 加载对应的controller文件和对象,调用对应的方法

dispathch最后的结构是类似这一种的哦

 [dispatchInfo] => Array
        (
            [controller] => IndexController
            [action] => indexAction
        )

setConfig和getconfig主要是调用config对象的方法

setReg( name, obj) 注册对象或者参数

setClassPath 往配置里面加入加载路径

setDispatchInfo 设置变量

factory实例化一个类,当然咱们也可以直接不用factory实例化,

我觉得这个地方可以再加个是否setReg的配置,复用这个类,恩,在代码里面已调整

public static function factory($type, $config)
    {
        $adapter = $config['adapter'];
        $class = $type . '_' . ucfirst($adapter);
        return new $class($config);
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值