Heim > Backend-Entwicklung > PHP-Tutorial > PSR6-Rationalitätsdiskussion

PSR6-Rationalitätsdiskussion

WBOY
Freigeben: 2016-08-08 09:06:50
Original
1011 Leute haben es durchsucht

Ich versuche jetzt, eine Implementierung von PSR-6

zu schreiben

Als ich die CacheItemPoolInterface-Schnittstelle implementierte, war ich verwirrt über die save-Methode. Die save-Methode erhielt nur einen Parameter vom Typ CacheItemInterface, aber die CacheItemInterface-Schnittstelle stellte keine ähnliche Methode bereit zu getExpireTime , was dazu führt, dass CacheItemPoolInterface die Ablaufzeit des Cache-Elements nicht ermitteln kann und daher die Daten nicht korrekt in den Cache-Speicher schreiben kann.

Ich habe mehrere bekannte PSR-6-Implementierungen gesehen, wie z. B. symfony/cache php-cache/cache tedious/Stash. Allerdings sind diese Implementierungsversionen bei der Implementierung der save-Methode nicht sehr elegant.

Zum Beispielsymfony/cache

<code>public function save(CacheItemInterface $item)
{
    if (!$item instanceof CacheItem) {
        return false;
    }
    if ($this->deferred) {
        $this->commit();
    }
    $this->deferred[$item->getKey()] = $item;
    return $this->commit();
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Diese save-Methode kann nur Parameter des Typs SymfonyComponentCacheCacheItem übergeben. Die Übergabe anderer Typen gibt false zurück.

Die aktuelle Situation ist, dass Sie, wenn Sie eine Klassenbibliothek schreiben möchten, die Caching verwendet, eine bestimmte PSR-6-Implementierung als Abhängigkeit angeben müssen, nicht nur psr/cache. Wenn Sie sich andererseits die Protokollschnittstelle PSR-3 ansehen und eine Klassenbibliothek schreiben möchten, die Protokollierungsfunktionen erfordert, müssen Sie nur psr/log einführen, und es ist keine spezifische Implementierung erforderlich.

Meiner Meinung nach benötigt PSR-6 nicht die CacheItemInterface-Schnittstelle, ändern Sie einfach die save-Methode in save($key, $value, $expire_at).

Ich habe auf Packagist nach Cache gesucht, z. B. doctrine/cache sonata-project/cache illuminate/cache usw., aber ich habe mich nicht dafür entschieden, PSR-6 zu folgen

Antwortinhalt:

Ich versuche jetzt, eine Implementierung von

PSR-6 zu schreiben

Als ich die

-Schnittstelle implementierte, war ich verwirrt über die CacheItemPoolInterface-Methode. Die save-Methode erhielt nur einen Parameter vom Typ save, aber die CacheItemInterface-Schnittstelle stellte keine ähnliche Methode bereit zu CacheItemInterface , was dazu führt, dass getExpireTime die Ablaufzeit des Cache-Elements nicht ermitteln kann und daher die Daten nicht korrekt in den Cache-Speicher schreiben kann. CacheItemPoolInterface

Ich habe mehrere bekannte

-Implementierungen gesehen, wie z. B. symfony/cache php-cache/cache tedious/Stash. Allerdings sind diese Implementierungsversionen bei der Implementierung der PSR-6-Methode nicht sehr elegant. save

Zum Beispiel

symfony/cache

<code>public function save(CacheItemInterface $item)
{
    if (!$item instanceof CacheItem) {
        return false;
    }
    if ($this->deferred) {
        $this->commit();
    }
    $this->deferred[$item->getKey()] = $item;
    return $this->commit();
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Diese

-Methode kann nur Parameter des Typs save übergeben. Die Übergabe anderer Typen gibt SymfonyComponentCacheCacheItem zurück. false

Die aktuelle Situation ist, dass Sie, wenn Sie eine Klassenbibliothek schreiben möchten, die Caching verwendet, eine bestimmte

-Implementierung als Abhängigkeit angeben müssen, nicht nur PSR-6. Wenn Sie sich andererseits die Protokollschnittstelle psr/cache ansehen und eine Klassenbibliothek schreiben möchten, die Protokollierungsfunktionen erfordert, müssen Sie nur PSR-3 einführen, und es ist keine spezifische Implementierung erforderlich. psr/log

Meiner Meinung nach benötigt

nicht die PSR-6-Schnittstelle, ändern Sie einfach die CacheItemInterface-Methode in save. save($key, $value, $expire_at)

Ich habe auf Packagist nach Cache gesucht, z. B.

doctrine/cache sonata-project/cache usw., aber ich habe mich nicht dafür entschieden, illuminate/cache zu folgen

Verwandte Etiketten:
Quelle:php.cn
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