控制层核心

of::dispatch($class = null, $action = null, $check = false) 调度入口, 触发of::dispatch事件

<?php
/**
 * 如果加载'/demo/ofControllers.php'的返回值通过check, 便new对象后调用index方法
 * 返回 index 方法的返回值
 */
$result = of::dispatch('demo_ofControllers', 'index', 'allow');
if( is_array($result) ) {
    echo json_encode($result);                                         //ajax + hmtl 方式开发很有用
}
/**
 * 返回值为{'class': 'demo_ofControllers', 'action' => 'index'}
 */
of::dispatch();
/**
 * 修改调度信息
 */
of::dispatch('demo_test', 'demo', false);

of::config($name = null, $default = null, $format = 'off') 读取config数据, 返回值,失败返回$default

<?php
of::config('_of.xx.cc');    //读取框架变量['xx']['cc']的值

&of::event($key, $event, $params = null) 为类提供回调事件, 触发时返回一个数组包含所有触发返回的数据,管理时返回事件数据,其它无返回值

<?php
/**
 * 框架内部事件说明如下 :
 * of::halt             代码执行结束后回调
 * of::error            自定义异常或错误
 *     触发参数 : 对象=异常对象, 数组=指定错误 {
 *          "code" : 错误代码, 默认 E_USER_NOTICE
 *          "info" : 错误描述, 默认 "Unknown error"
 *          "file" : 文件路径, 默认 代码触发文件
 *          "line" : 错误行数, 默认 代码触发行数
 *     }
 * of::dispatch         调度信息变化时调用
 *     触发参数 : {
 *          "class"  : &调度类名
 *          "action" : &调度方法
 *          "check"  : &校验参数
 *     }
 * of::loadClass        加载新类前调用      应用演示
 *     注册参数 : {
 *          "filter" :*匹配的类前缀触发回调
 *          "router" : 路由模式, 映射前缀,字符串=类前缀替换该字符串(第一个字符不为"/"时会把"_"替换为"/"做为寻类路径)
 *          "asCall" : 回调模式, 函数回调,不能与router共存
 *          "params" : 回调参数,用[_]键指定触发参数位置
 *     }
 *     触发参数 : 回调模式下生效 {
 *          "name" : 类名
 *          "code" :&代码, 更改执行的代码, null=不更改
 *          "file" :&路径, 更改代码的路径, null=不更改
 *     }
 * of_view::display     加载视图模板前触发
 *     触发参数 : {
 *          "tplDir"  : &加载的模板路径
 *          "viewObj" : of_view对象
 *     }
 * of_db::rename        重命名指定连接池
 *     触发参数 : {
 *          "oName" : 旧名称
 *          "nName" : 新名称
 *     }
 * of_db::before        sql语句执行前触发
 *     触发参数 : {
 *          "sql"  : &sql语句
 *          "pool" : 连接池键
 *     }
 * of_db::after         sql语句执行后触发
 *     触发参数 : {
 *          "sql"    : &sql语句
 *          "pool"   : 连接池键
 *          "result" : &执行的结果集
 *     }
 * of_db::error         sql出现错误时回调
 *     触发参数 : {
 *          "code" : 错误编码
 *          "info" : 错误信息
 *          "note" : 详细日志
 *          "sql"  : &sql语句
 *          "pool" : 连接池键
 *     }
 * of_base_htmlTpl_engine::compile     编译模版引擎前触发
 *     触发参数 : {
 *          "tplObj" : &模板的hParse对象
 *          "tplDir" : 模版的磁盘路径
 *     }
 * of_base_error_writeLog::error     发生错误时触发
 *     触发参数 : {
 *          "type" : 错误来源, 其中一个(js, php, mysql)
 *          "data" : 错误信息
 *     }
 *     回调返回 :
 *          true=接替日志记录, 框架不记录日志
 * of_base_com_net::before     请求开始前触发
 *     触发参数 : {
 *          "params" :&请求参数 {
 *              "type"    : 交互类型(大写字符串)可以是 OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE
 *              "data"    : 报文主体数据(字符串)
 *              "get"     : get数据(字符串)
 *              "cookie"  : cookie数据(字符串)
 *              "header"  : 自定义头信息(字符串)
 *              "timeout" : [连接超时, 响应超时]
 *              "url"     : 访问路径(字符串)

 *              其它调用调用参数
 *          }
 *     }
 * of_base_com_net::after     请求结束后触发
 *     触发参数 : {
 *          "params" :&请求参数, 同"of_base_com_net::before事件"结构
 *          "result" :&请求结果, 同"of_base_com_net::request"响应结构
 *     }
 */

/**
 * 事件列表结构如下($event为null时会返回对应事件类型的引用) : {
 *     事件类型 : {
 *         "change" : 添加删除时会变true
 *         "list"   : [{
 *             "isCall" : true=是回调类型,false=特殊结构
 *             "event"  : 回调事件
 *             "change" : 新加时会为true
 *         }]
 *     }
 * }
 */

of::work($code, $info = '', $data = array()) 管理工作流程

参数使用说明
描述 : 管理工作流程, 独立的 时间 队列 错误及事务, 让代码更简洁
     工作可以嵌套, 产生任何错误, 事务都会回滚, 避免无意的嵌套, 每个工作都会占用独立数据库连接资源
     可以使用 try catch 或 回调方式 开始一个工作
     可以获取 当前工作开始时间 与 产生的错误
     可以抛出 工作异常 并通过捕获简化代码逻辑
参数 :
    #开启工作(数组, null)
     code : 监听数据库连接, 产生问题会自动回滚, 数组=[连接池, ...], null=自动监听
     info : 功能参数
         int=增加数据监控, 0为当前工作, 1=父层工作..., 指定工作不存在抛出异常
         框架回调结构=回调模式创建工作, 不需要 try catch, 回调接收(params)参数 {
                 "result" : &标准结果集
                 "data"   : &标准结果集中的data数据
             }
             返回 false 时, 回滚工作, 等同 of::work(200, 'Successful', params['data'])
             返回 array 时, 赋值data, 等同 params['data'] = array;
     data : null=启动集成工作, 统一监听子孙工作事务, 启动时自动设置自动监听

    #结束工作(布尔)
     code : 完结事务, true=提交, false=回滚

    #抛出异常(数字)
     code : 问题编码, [400, 600)之间的数字
     info : 提示信息
     data : 扩展参数, 一个数组

    #捕捉异常(对象)
     code : 异常对象, 通过 try catch 捕获的异常

    #获取时间(文本)
     code : 固定"time"
     info : 返回时间格式, 默认2=格式化时间, 1=时间戳, 3=[时间戳, 格式化, 时区标识, 格林时差]

    #操作错误(文本)
     code : 固定"error"
     info : 默认true=获取错误, false=清除错误

    #全局排除监听(文本)
     code : 固定"block"
     info : 排查的监听列表, {
         "数据库连接池" : true=排除, false=移除
         ...
     }

    #工作信息(文本)
     code : 固定"info"
     info : 获取指定"info"信息, 默认=3(1 | 2), 1=工作ID, 2=监听数据库, 4=注入回调信息

    #延迟回调(文本) 在工作事务提交前按队列顺序执行
     code : 固定"defer"
     info : 回调方法接收参数结构 {"wuid" : 工作ID, "isOk" : true=最终提交 false=最终回滚}
         true = 读取指定标识的回调
         false = 删除指定标识的回调
         框架回调结构 = 不开启工作直接回调, 若报错将影响当前工作执行结果
         {"onWork" : 监听数据库, "asCall" : 框架回调, "params" :o回调参数} = 在新工作中回调
     data : 回调唯一标识, 默认=随机标识, 字符串=指定标识

    #完成回调(文本) 在工作事务提交后按队列顺序执行
     code : 固定"done"
     info : 回调方法接收参数结构 {"wuid" : 工作ID, "isOk" : true=最终提交 false=最终回滚}
         true = 读取指定标识的回调
         false = 删除指定标识的回调
         框架回调结构 = 不开启工作直接回调, 若报错将影响父级工作执行结果
         {"onWork" : 监听数据库, "asCall" : 框架回调, "params" :o回调参数} = 在新工作中回调
     data : 回调唯一标识, 默认=随机标识, 字符串=指定标识
返回 :
    #开启工作(数组)
     失败抛出异常, 成功 {"code" : 200, "info" : "Successful", "data" : []}

    #结束工作(布尔)
     失败抛出异常

    #抛出异常(数字)
     抛出工作异常

    #捕捉异常(对象)
     其它异常继续抛出, 为工作异常返回 {
         "code" : 异常状态码
         "info" : 提示信息
         "data" : 问题数据
     }

    #获取时间("time")
     返回当前工作的开始时间, 未在工作中抛出异常

    #操作错误("error")
     未在工作中依然生效, 没错误返回null, 有错误返回 {
         "code" : 编码,
         "info" : 错误,
         "file" : 路径,
         "line" : 行数,
         ...
     }

    #全局排除监听("block")
     排查的监听列表 {
         "数据库连接池" : true
         ...
     }

    #工作信息("info")
     不在工作中返回 null
     指定项存在, 返回项信息, 单项返回值, 多项返回数组 {
             1"wuid"  : 工作ID,
             2"list"  : [监听连接池, ...],
             4"defer" :&{回调ID : 回调信息, ...}
             4"done"  :&{回调ID : 回调信息, ...}
         }

    #延迟回调("defer")
    #完成回调("done")
     info为true时, 返回回调信息, 不存在返回null, 不在工作中抛出异常
注明 :
     返回的状态码一览表
         500 : 发生内部错误(代码报错)
回调用法演示(推荐)
//开始工作, 动态开启SQL事务, $params 结构 {"result" : &接口响应结构, "data" : &标准结果集中的data数据}
$result = of::work(null, function ($params) {
    //$params['result'] 数据 {"code":200,"info":"Successful","data":[]}
    echo '实参数据: ', json_encode($params['result']), "<br>\n";
    //修改结果集数据
    $params['data'] = array(1, 2, 3);

    //生成一个演示错误
    trigger_error('产生一个错误');
    //无错误返回 null, 否则返回 {"code" : 编码, "info" : 错误, "file" : 路径, "line" : 行数, ...}
    echo '是否产生错误: ', of::work('error') ? '是' : '否', "<br>\n";
    //清除当前工作错误
    of::work('error', false);

    //添加延迟调用到工作结束前(依然在事务中)
    of::work('defer', array(
        'onWork' => array(),
        'asCall' => 'var_dump',
        'params' => array(
            "\n<br>执行延迟回调: "
        )
    ), __METHOD__);

    //添加完成调用到工作结束前(在父级工作中)
    of::work('done', array(
        'onWork' => of::work('info', 'list'),
        'asCall' => 'var_dump',
        'params' => array(
            "\n<br>执行完成回调: "
        )
    ), __METHOD__);

    //不在工作中返回 null, 反之返回 {"list" : [监听连接池, ...]}
    echo '是否在工作中: ', of::work('info') ? '是' : '否', "<br>\n";

    //查询工作时间
    echo '工作开始时间: ', of::work('time'), "<br>\n";
    echo '工作开始时间戳: ', of::work('time', 1), "<br>\n";

    //抛出可捕捉异常
    of::work(401, '工作异常不会抛错', array(4, 5, 6));
    //返回 false 回滚工作, 不写产生错误时回滚, 返回 array 等同赋值到 $params['data']
    return false;
});

//打印结果集 {"code"401,"info":"工作异常不会抛错","data":[4,5,6]}
echo json_encode($result);
常规用法演示
try {
    //开始工作, 会启动"default"事务, 返回 {"code" : 200, "info" : "Successful", "data" : []}
    $result = of::work(array('default'));

    //演示两种不同异常
    of::work(401, '工作异常不会抛错', array(1, 2, 3));
    throw new Exception('常规异常会被记录');

    //完结工作, true=提交事务, false=回滚事务, 失败会抛出常规异常
    of::work(true);
} catch (Exception $e) {
    //捕获异常, 常规异常记录日志, 返回"接口响应结构"
    $result = of::work($e);
}

//打印结果级
echo '<br>工作完成结果: ';
print_r($result);

&of::slashesDeep(&$data, $func = 'addslashes') 深度加/删反斜杠, 返回 $data 引用

&of::arrayReplaceRecursive(&$baseData, &$replace) 深度替换属性, 返回$baseData

of::callFunc(&$call, $params = null, $return = error) 回调函数, 返回 调用函数 返回的数据

of::formatPath($path, $prefix) 格式化路径

&of::getArrData($key, &$data = null, $default = null, $extends = 0) 通过字符串获取数组深度数据

&of::syntax($code, $exec = false, $tips = false, &$data = null) 校验php语法

<?php
/**
 * 语法通过返回 null
 * 语法失败返回 {
 *     "info" : 错误信息
 *     "line" : 错误行数
 *     "tips" : 按 tips 参数显示的代码
 * }
 */
of::syntax('if');     // {"info":"syntax error, unexpected $end, expecting '('","line":1}
of::syntax('echo __FILE__;', 'file.php');     // file.php