浏览器防刷新检测:)

这是在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()函数,对成员变量进行赋值,在此分析完毕,

PhalApi -PHP轻量级开源接口框架 初体验

机缘巧合下,接触了PhalApi这个接口框架,本着探索精神摸索了一番,首先使用git工具在 git clone https://git.oschina.net/dogstar/PhalApi.git 切换到release克隆下来,
上传到服务器,(我上传的服务器一个目录下);进行安装,安装完成后,访问http://domain/Public/,会返回他默认接口的数据,
这里我推荐使用Chrome下的jsonVIEW插件:

{
ret: 200,
-data: {
    title: "Hello World!",
    content: "PHPer您好,欢迎使用PhalApi!",
    version: "1.3.1",
    time: 1456827735
},
msg: ""
}

首先是访问了Public目录下的index.php文件,打开源文件,你会发现相应接口请求下会有这么一句:

$rs = $api->response();

查看这个response方法你会发现 :$service = DI()->request->get('service', 'Default.Index');
也就是当你没有定义访问莫个接口的时候,它会指向到Default模块下的Index接口
实现这一机制的是方法下面的这两句

        list($apiClassName, $action) = explode('.', $service);  
        $rs->setData(call_user_func(array($api, $action)));

通过工厂方法创建合适的控制器,然后调用指定的方法,最后返回格式化的数据。

sublime text - 快捷键

1:在一行中,command键+右箭头,直接跳到一行的结尾
alt键 + 左箭头 ,一个单词的选择

可以将sublime的设置放在Github上,这样就可以不用每次都安装了,我的地址是:https://github.com/xiaobinshiyan/sublime_setting.git
包含了一些自己的配置加上一些常用插件,,仅供参考————