這篇文章將為大家詳細(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 源碼
最近在學(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)慎修改源碼。
在練習(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
。
解決方法就是在 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)把它分享出去讓更多的人看到。