数据封装

of_base_com_data::json($data, $mode = 1) 安全的json

<?php
/**
 * 返回编码解码后的数据
 */
$data = '<script>"嗨"';
json_encode($data);                                 //"<script>\"\u55e8\""

$result = of_base_com_data::json($data, 1);         //""\u003Cscript\u003E\"嗨\""
of_base_com_data::json($result, 0);                 //<script>"嗨"

//添加反斜线
$result = of_base_com_data::json($data, 1 | 2);     //\"\\u003Cscript\\u003E\\\"嗨\\\"\"
of_base_com_data::json($result, 0 | 2);             //<script>"嗨"

of_base_com_data::digest($data) 计算数据的唯一摘要值

<?php
//键的顺序不同结果相同
of_base_com_data::digest(array('a' => 1, 'b' => 2));    //ef8ba71070086c47bd785b4271d1fb54
of_base_com_data::digest(array('b' => 2, 'a' => 1));    //ef8ba71070086c47bd785b4271d1fb54

of_base_com_data::lock($name, $lock = 2, $argv = array()) 为并发流程创建独占通道, 工作中的锁会随工作结束而解锁

<?php
/**
 * 成功返回true, 失败返回false
 * 使用"2 | 4"方式尝试加独享锁
 * 配置_of.com.data.lock调整分布式锁属性
 */
of_base_com_data::lock('group::demo', 2);   //打开demo标识独享锁
of_base_com_data::lock('group::demo', 3);   //关闭demo标识独享锁

of_base_com_data::rule(&$data, $rule) 数据格式校验

<?php
$data = array(
    'user'    => 'userName',
    'captcha' => 'asdf',
    'data'    => array(
        'mail' => 'demo@test.com',
        'age'  => '12'
    ),
    'detail'  => array(
        'bbb' => array(
            'b44' => '221'
        ),
        'ddd' => array(
            'a22' => '331'
        ),
    )
);
$error = of_base_com_data::rule($data, array(
    //文本类型切必须存在
    'user'      => 'text',
    //文本类型自动填充
    'nick'      => array('type' => 'text', 'default' => '昵称'),
    //文本类型限制长度
    'captcha'   => array('type' => 'text', 'argv' => array('min' => 3, 'max' => 3)),
    //验证子类型
    'data.mail' => 'mail',
    //分组验证子类型
    'data'      => array(
        'type' => array(
            //强制验证数据类型
            'age' => array('type' => 'int', 'argv' => array('idem' => true)),
            //填充默认数据
            'sex' => array('type' => 'text', 'default' => '男'),
        )
    ),
    'detail.*.*' => array(
        'keys' => array(
            //验证第一个"*"的键名全为"b"或"c"
            array('type' => '@^[bc]+$@'),
            //验证第二个"*"的键名以"a"+数字结构
            array('type' => '@^a\d+$@'),
        )
    )
));

echo '错误: '; print_r($error);
/*
错误: Array
(
    [captcha] => Val illegal, should be text, length >= 3 and <= 3 : asdf
    [data.age] => Val illegal, should be int, strict type : 12
)
*/

echo '结果: '; print_r($data);
/*
结果: Array
(
    [user] => userName
    [captcha] => asdf
    [data] => Array
        (
            [mail] => demo@test.com
            [age] => 12
            [sex] => 男
        )

    [nick] => 昵称
)
*/