Heim > Backend-Entwicklung > PHP-Tutorial > Einführung in die Methode zum Ändern des Cache-Quellcodes in ThinkPHP 5.1 (Codebeispiel)

Einführung in die Methode zum Ändern des Cache-Quellcodes in ThinkPHP 5.1 (Codebeispiel)

不言
Freigeben: 2023-04-05 06:42:02
nach vorne
2344 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in die Methode zum Ändern des Cache-Quellcodes in ThinkPHP 5.1. Ich hoffe, dass er für Freunde hilfreich ist.

Ich lerne kürzlich THinkPHP 5.1 und nachdem ich die Funktionsweise der Cache-Methode gesehen habe, bin ich etwas verwirrt. Obwohl es viele Methoden kapselt und sehr benutzerfreundlich ist, scheint es für fortgeschrittene Operationen von Redis nicht sehr benutzerfreundlich zu sein. Zu Lernzwecken wurde der Quellcode leicht geändert. Lassen Sie mich zunächst zwei Punkte ansprechen: Erstens ist diese Änderung nur eine persönliche Meinung und nicht für jedermann geeignet. Zweitens dient diese Änderung nur zum Lernen. Bitte seien Sie vorsichtig, wenn Sie den Quellcode ändern.

Problem

Beim Üben von Redis habe ich festgestellt, dass Sie zuerst das Handle zurückgeben müssen, wenn Sie erweiterte Methoden wie hSet, hGet usw. verwenden möchten es ausführen. Wie Sie unten

<?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)
    }
}
Nach dem Login kopieren

sehen können, war die Ausführung erfolgreich. Die Frage ist, warum das Handle zuerst zurückgegeben werden soll, was mit der magischen Methode von __call gelöst werden kann.

Verfolgen Sie den Quellcode

Da Sie Zweifel haben, müssen Sie diese klären. Als ich den Quellcode verfolgte, sah ich thinkphp/library/think/cache/Driver.php und stellte fest, dass es tatsächlich keinen __call gab, sondern nur einen Handler, der das Handle zurückgab, um erweiterte Methoden auszuführen. Ich verstehe nicht, warum __clss nicht verwendet wird.

Das Problem lösen

Die Lösung besteht darin, die __call-Methode in thinkphp/library/think/cache/Driver.php hinzuzufügen, damit nicht nur Redis Advanced verwenden kann Methoden direkt, aber auch andere Cache-Klassen, die diese Datei erben, können direkt verwendet werden. Der Code lautet wie folgt

     /**
     * 执行高级方法
     * @param $method
     * @param $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return call_user_func_array(array($this->handler(), $method), $parameters);
    }
Nach dem Login kopieren

Sehen Sie sich den Testcode noch einmal an

<?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)
    }
}
Nach dem Login kopieren

Dieses Problem wurde gelöst. Als ich mit der Änderung fertig war, fiel mir ein, dass Laravel anscheinend __call verwendet, und dann schaute ich mir den Quellcode an, und das war tatsächlich der Fall. Es gibt den folgenden Code in 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);
    }
Nach dem Login kopieren

Fazit

Tatsächlich die symbolische Bedeutung von Diese kleine Änderung ist von größerer praktischer Bedeutung, schließlich ist dies kein Fehler, sondern kann auch mit dem Handler erreicht werden. Die größere Bedeutung für mich besteht darin, dass ich bei Problemen eher dazu geneigt bin, den Quellcode zu überprüfen. Je mehr Sie zuschauen, desto besser werden Ihre Fähigkeiten.

Das obige ist der detaillierte Inhalt vonEinführung in die Methode zum Ändern des Cache-Quellcodes in ThinkPHP 5.1 (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage