成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

ThinkPHP 5.1 修改 Cache 源碼

linkFly / 647人閱讀

摘要:首先聲明兩點(diǎn)一是此次的修改,只是個(gè)人觀點(diǎn),不適于所有人二是此次修改僅為學(xué)習(xí)所用,各位謹(jǐn)慎修改源碼。追蹤源碼既然有了疑惑,就要解惑。對(duì)我來(lái)說(shuō)更大的意義是,遇到些問題會(huì)更傾向于查看源碼。

導(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)慎修改源碼。

問題

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

handler();

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

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

追蹤源碼

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

解決問題

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

     /**
     * 執(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)
    }
}

到此問題已解決。當(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);
    }
結(jié)語(yǔ)

其實(shí)這次小修改的象征意義大于實(shí)際意義,畢竟這不是什么 bug,使用 handler 也是可以實(shí)現(xiàn)的。對(duì)我來(lái)說(shuō)更大的意義是,遇到些問題會(huì)更傾向于查看源碼??吹枚嗔?,自然能力會(huì)提升。


參考資料:魔術(shù)方法、THinkPHP 緩存、Laravel redis、call_user_func_array。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/30063.html

相關(guān)文章

  • ThinkPHP5.1中間件在控制器中使用過(guò)程

    摘要:中間件在控制器中使用過(guò)程使用中間件的開始以及我的步驟描述,希望可以幫到才學(xué)或者才學(xué)框架的你們希望能夠與你們交流,讓自己進(jìn)步。 ThinkPHP5.1中間件在控制器中使用過(guò)程 使用中間件的開始以及我的步驟描述,希望可以幫到才學(xué)php 或者才學(xué)think框架的你們希望能夠與你們交流,讓自己進(jìn)步。 中間件在Thinkphp框架中的作用我已經(jīng)明白了,就是在請(qǐng)求即將達(dá)到應(yīng)用層之前,對(duì)用戶訪問資...

    peixn 評(píng)論0 收藏0
  • thinkphp5增加允許指定ip訪問模塊配置

    摘要:在中添加設(shè)置某些可以訪問指定模塊所有都可以訪問模塊,僅這兩個(gè)可以訪問模塊最好加在這個(gè)位置禁止訪問模塊設(shè)置某些可以訪問指定模塊默認(rèn)控制器名需要修改框架代碼代碼位置如下多模塊部署綁定模塊設(shè)置了限制訪問模塊如模塊初始化初始化模塊模塊請(qǐng)求緩存檢查 在config.php中添加 allow_module_ip => [admin => *], // 設(shè)置某些ip可以訪問指定模塊 [admin =...

    ISherry 評(píng)論0 收藏0
  • PHP_ThinkPHP

    摘要:相關(guān)信息,面向過(guò)程,面向?qū)ο螅p量級(jí)。輕量級(jí)功能實(shí)用,面向過(guò)程和面向?qū)ο蠡旌祥_發(fā)。找到文件為文件名為驗(yàn)證碼類沒有在自動(dòng)加載類中載入,需要手動(dòng)載入。底層的和會(huì)影響原始的框架中的引入,可以使用框架中提供的引入。 不使用框架的問題 在實(shí)際工作中,如果不使用框架會(huì)遇到的問題。 程序項(xiàng)目生命時(shí)間非常短(維護(hù)性,生命力弱) 分共協(xié)作開發(fā)項(xiàng)目,彼此代碼風(fēng)格不一致。 開發(fā)程序,喜歡挖坑。 開發(fā)者離職...

    wind3110991 評(píng)論0 收藏0
  • thinkphp下配置和使用阿里云redis

    摘要:未完待續(xù)端配置里的相關(guān)配置阿里云和在購(gòu)買阿里云時(shí)會(huì)得到,把相應(yīng)的值配置到就行。小結(jié)操作相對(duì)簡(jiǎn)單,本人簡(jiǎn)單介紹了,在下,的相關(guān)配置以及簡(jiǎn)單使用,今天先寫這么多,日后會(huì)有更新。 1.redis簡(jiǎn)介 Redis是一個(gè)開源的使用ANSI C語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù)。(未完待續(xù)...) 2.thinkphp端配置 config.php里的相關(guān)配置...

    meislzhua 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<