我現在在嘗試寫一個PSR-6
的實作
當我在實現CacheItemPoolInterface
接口時,對於save
方法感到困惑,save
方法只接收一個CacheItemInterface
類型的參數,但是CacheItemInterface
這個接口卻沒有提供類似getExpireTime
的方法,這就導致CacheItemPoolInterface
沒有辦法取得到快取項目的過期時間,也就沒辦法正確地將資料寫入到快取儲存中。
我看過幾個比較著名的PSR-6
實現,例如 symfony/cache php-cache/cache tedious/Stash 然而這些實現版本在實現save
方法時並不是非常優雅。
例如symfony/cache
這個save
方法只有傳入SymfonyComponentCacheCacheItem
型別的參數才可以,傳入其他型別都會回傳false
。
目前的情況是,如果想要寫一個用到快取的類別庫,就必須指定一個具體的PSR-6
實作作為依賴,而不僅僅是psr/cache
。而反觀PSR-3
這個日誌接口,要寫一個需要日誌功能的類別庫,只需要引入psr/log
即可,不需要具體實作。
在我看來,PSR-6
並不需要CacheItemInterface
這個接口,只需要把save
方法修改成save($key, $value, $expire_at)
即可。
我在packagist上面搜尋cache,其他一些比較有名的快取庫,例如doctrine/cache
sonata-project/cache
illuminate/cache
等,都沒有選擇遵循PS
illuminate/cache
回覆內容:
我現在在嘗試寫一個
的實作
當我在實現CacheItemPoolInterface
接口時,對於save
方法感到困惑,save
方法只接收一個CacheItemInterface
類型的參數,但是CacheItemInterface
這個接口卻沒有提供類似getExpireTime
的方法,這就導致
沒有辦法取得到快取項目的過期時間,也就沒辦法正確地將資料寫入到快取儲存中。
我看過幾個比較著名的PSR-6
實現,例如 symfony/cache php-cache/cache tedious/Stash 然而這些實現版本在實現
方法時並不是非常優雅。
例如
<pre class="brush:php;toolbar:false"><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></pre>
這個save
方法只有傳入SymfonyComponentCacheCacheItem
型別的參數才可以,傳入其他型別都會回傳
。
目前的情況是,如果想要寫一個用到快取的類別庫,就必須指定一個具體的PSR-6
實作作為依賴,而不僅僅是psr/cache
。而反觀PSR-3
這個日誌接口,要寫一個需要日誌功能的類別庫,只需要引入
即可,不需要具體實作。
在我看來,PSR-6
並不需要CacheItemInterface
這個接口,只需要把save
方法修改成
即可。
我在packagist上面搜尋cache,其他一些比較有名的快取庫,例如doctrine/cache
sonata-project/cache
illuminate/cache
等,都沒有選擇遵循