国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

ThinkPHP 5.1修改Cache 源碼的方法介紹(代碼示例)

2020-03-22 20:04:42
字體:
來源:轉載
供稿:網友

本篇文章給大家帶來的內容是關于ThinkPHP 5.1修改Cache 源碼的方法介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

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

問題

在練習 Redis 的時候,發現如果想要使用高級方法,例如 hSet、hGet 等,要先返回句柄,然后才能執行。如下

 ?phpnamespace app/index/controller;use think/cache/driver/Redis;use think/Controller;html' target='_blank'>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); }

再看下測試代碼

 ?phpnamespace 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 源碼的方法介紹(代碼示例)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浦北县| 中阳县| 当阳市| 偃师市| 广汉市| 辽源市| 舞钢市| 榆社县| 资溪县| 怀宁县| 咸丰县| 宽城| 科技| 亳州市| 龙泉市| 义马市| 海原县| 营口市| 屏东县| 崇信县| 抚顺市| 右玉县| 比如县| 分宜县| 景德镇市| 宜春市| 休宁县| 林芝县| 茂名市| 读书| 新源县| 海伦市| 本溪| 云和县| 汤阴县| 焉耆| 灵宝市| 忻城县| 西盟| 翁源县| 峨山|