真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ThinkPHP5.1修改Cache源碼的示例分析

這篇文章將為大家詳細(xì)講解有關(guān)ThinkPHP 5.1修改Cache源碼的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比依安網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式依安網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋依安地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴(lài)。

ThinkPHP 5.1 修改 Cache 源碼

導(dǎo)語(yǔ)

最近在學(xué)習(xí) THinkPHP 5.1,看了 Cache 方法的操作,有一點(diǎn)疑惑。雖然封裝了很多方法,使用的時(shí)候很方便,但是對(duì) redis 的高級(jí)操作好像不是很友好,出于學(xué)習(xí)的目的,對(duì)源碼進(jìn)行了一點(diǎn)小修改。首先聲明兩點(diǎn):一是此次的修改,只是個(gè)人觀點(diǎn),不適于所有人;二是此次修改僅為學(xué)習(xí)所用,各位謹(jǐn)慎修改源碼

問(wèn)題

在練習(xí) Redis 的時(shí)候,發(fā)現(xiàn)如果想要使用高級(jí)方法,例如 hSet、hGet 等,要先返回句柄,然后才能執(zhí)行。如下

handler();

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

可以看到,執(zhí)行成功。問(wèn)題是為什么要先返回句柄,可以用 __call 這種魔術(shù)方法來(lái)解決的。

追蹤源碼

既然有了疑惑,就要解惑。追蹤著源碼,看到 thinkphp/library/think/cache/Driver.php,發(fā)現(xiàn)確實(shí)沒(méi)有 __call,只是 handler 來(lái)返回句柄來(lái)執(zhí)行高級(jí)方法。沒(méi)想明白為什么不用 __clss。

解決問(wèn)題

解決方法就是在 thinkphp/library/think/cache/Driver.php  中添加 __call 方法,這樣不止 Redis 可以直接使用高級(jí)方法,其他繼承此文件的 Cache 類(lèi)都可以直接使用。代碼如下

     /**
     * 執(zhí)行高級(jí)方法
     * @param $method
     * @param $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return call_user_func_array(array($this->handler(), $method), $parameters);
    }

再看下測(cè)試代碼

handler();

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

到此問(wèn)題已解決。當(dāng)我修改完的時(shí)候,想起 Laravel 似乎就是用的 __call,然后去看了源碼,確實(shí)如此。在 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);
    }

關(guān)于“ThinkPHP 5.1修改Cache源碼的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


名稱(chēng)欄目:ThinkPHP5.1修改Cache源碼的示例分析
URL分享:http://weahome.cn/article/gddscj.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部