发现了一个很强的函数 (PHP)

比较两个数组的键名,并返回交集:

<?php
    $a1=array("a"=>"red","b"=>"green","c"=>"blue");
    $a2=array("a"=>"red","c"=>"blue","d"=>"pink");

    $result=array_intersect_key($a1,$a2);
    print_r($result);
?>

上面的测试案例是在w3c上拷下来的,我觉得这样子省去了 foreach 这个步骤了,感觉有点强,<有时候配合array_flip()这个函数,交换数组中的键和值>

现在具体还没有用到,用到的时候在写吧!

这是在一个外国人写的代码中发现的,感觉好牛~~

今天完成了一个简单的RBAC的管理,基于Codeigniter

主要原理就是经典的RBAC模型:

220056_eaY7_1476692.jpg

用户user与角色role通过映射表user_role关联,角色role与权限permission通过映射表role_permission关联,就是RBAC最简易模型,基于角色的权限模型

Github地址:https://github.com/xiaobinshiyan/mycms

浏览器防刷新检测:)

这是在thinkphp源码拔下来的,感觉挺有用

/**
 * 浏览器防刷新检测
 */

    class BrowserCheckBehavior {
        public function run(&$params) {
            if($_SERVER['REQUEST_METHOD'] == 'GET') {
                //  启用页面防刷新机制
                $guid=md5($_SERVER['PHP_SELF']);
                // 浏览器防刷新的时间间隔(秒) 默认为10
                $refleshTime    =   C('LIMIT_REFLESH_TIMES',null,10);
                // 检查页面刷新间隔
                if(cookie('_last_visit_time_'.$guid) && cookie('_last_visit_time_'.$guid)>time()-$refleshTime)          
                {
                    // 页面刷新读取浏览器缓存
                    header('HTTP/1.1 304 Not Modified');
                    exit;
                }else{
                    // 缓存当前地址访问时间
                    cookie('_last_visit_time_'.$guid, $_SERVER['REQUEST_TIME']);
                    //header('Last-Modified:'.(date('D,d M Y H:i:s',$_SERVER['REQUEST_TIME']-            C('LIMIT_REFLESH_TIMES'))).' GMT');
                }
            }
        }
    }

在这里的C()函数是TP中的自带函数,获取系统配置

一些子方法~~比如生成唯一字符串的

function _generateSessionId() 
{
    $salt = "423^&78fdf*^\tFGFyWEId4\ra&2!cr3s56O1^";
    return md5($salt . uniqid('', true) . mt_rand());
}

==生成一个唯一sessionId 声明一下:由于基于系统时间,通过uniqid生成的 ID 不是最佳的。如需生成绝对唯一的 ID,请使用 md5() 函数。

PhalApi -PHP轻量级开源接口框架 DI.php分析

文件中的PhalApi_DI 依赖注入类
具体可参考:https://docs.phalconphp.com/en/latest/reference/di.html
在默认的请求中的index.php中 response()函数,找到PhalApi.php $rs = DI()->response;,对的就是这句纠结我很久很久, DI() 函数 返回的是依赖注入类PhalApi_DI的一个实例,DI()->response;需要获取类中成员变量,触发魔术函数__get(),看到之后的这个函数:

    public function get($key, $default = NULL) {
    if (!isset($this->data[$key])) {
        $this->data[$key] = $default;
    }

    $this->recordHitTimes($key);

    if ($this->isFirstHit($key)) {
        $this->data[$key] = $this->initService($this->data[$key]);
    }

    return $this->data[$key];
    }

这个函数的意思是执行内部方法,取得成员变量response实例,但是成员变量response哪里来的呢?

    public static function one() {
    if (self::$instance == NULL) {
        self::$instance = new PhalApi_DI();
        self::$instance->onConstruct();
    }

    return self::$instance;
}

public function onConstruct() {
    $this->request = 'PhalApi_Request';
    $this->response = 'PhalApi_Response_Json';
}

通过上面获取一个单例实例的时候,执行了一个函数 onConstruct();为成员变量resquest 和response赋值,但是类中无此成员变量,在上一次触发前先触发_set()魔术方法;执行set()函数,对成员变量进行赋值,在此分析完毕,