旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

ThinkPHP 5.1修正Cache 源码的要领引见(代码示例)【php教程】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP教程浏览:91


导读:本篇文章给人人带来的内容是关于ThinkPHP5.1修正Cache源码的要领引见(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。近来在进修TH...

本篇文章给人人带来的内容是关于ThinkPHP 5.1修正Cache 源码的要领引见(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。

近来在进修 THinkPHP 5.1,看了 Cache 要领的操纵,有一点迷惑。虽然封装了许多要领,运用的时刻很轻易,然则对 Redis 的高等操纵彷佛不是很友爱,出于进修的目标,对源码进行了一点小修正。起首声明两点:一是此次的修正,只是个人观点,不适于所有人;二是此次修正仅为进修所用,列位郑重修正源码。

题目

在演习 Redis 的时刻,发明假如想要运用高等要领,比方 hSet、hGet 等,要先返回句柄,然后才实行。以下

<?php
namespace app\index\controller;
use think\cache\driver\Redis;
use think\Controller;
class RedisTest extends Controller
{
    public function index()
    {
        $redis = new Redis();
        $redis = $redis->handler();

        dump($redis->hSet('h_name', '1', 'tom'));// int(1)
    }
}

能够看到,实行胜利。题目是为何要先返回句柄,能够用 __call 这类把戏要领来处理的。

追踪源码

既然有了迷惑,就要解惑。追踪着源码,看到 thinkphp/library/think/cache/Driver.php,发明确切没有 __call,只是 handler 来返回句柄来实行高等要领。没想邃晓为何不必 __clss。

处理题目

处理要领就是在 thinkphp/library/think/cache/Driver.php 中增加 __call 要领,如许不止 Redis 能够直接运用高等要领,其他继续此文件的 Cache 类都能够直接运用。代码以下

     /**
     * 实行高等要领
     * @param $method
     * @param $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return call_user_func_array(array($this->handler(), $method), $parameters);
    }

再看下测试代码

<?php

namespace app\index\controller;

use think\cache\driver\Redis;
use think\Controller;

class RedisTest extends Controller
{
    public function index()
    {
        $redis = new Redis();
//        $redis = $redis->handler();

        dump($redis->hSet('h_name', '2', 'jerry'));// int(1)
    }
}

到此题目已处理。当我修正完的时刻,想起 Laravel 好像就是用的 __call,然后去看了源码,确切云云。在 ravel/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php 中有以下代码

     /**
     * Pass methods onto the default Redis connection.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->connection()->{$method}(...$parameters);
    }

结语

实在此次小修正的象征意义大于实际意义,毕竟这不是什么 bug,运用 handler 也是能够完成的。对我来讲更大的意义是,碰到些题目会更倾向于检察源码。看得多了,天然才能会提拔。

以上就是ThinkPHP 5.1修正Cache 源码的要领引见(代码示例)的细致内容,更多请关注ki4网别的相干文章!

标签:thinkphp5php