PSR6合理性討論

WBOY
發布: 2016-08-08 09:06:50
原創
946 人瀏覽過

我現在在嘗試寫一個PSR-6的實作

當我在實現CacheItemPoolInterface接口時,對於save方法感到困惑,save方法只接收一個CacheItemInterface類型的參數,但是CacheItemInterface這個接口卻沒有提供類似getExpireTime的方法,這就導致CacheItemPoolInterface沒有辦法取得到快取項目的過期時間,也就沒辦法正確地將資料寫入到快取儲存中。

我看過幾個比較著名的PSR-6實現,例如 symfony/cache php-cache/cache tedious/Stash 然而這些實現版本在實現save方法時並不是非常優雅。

例如symfony/cache

<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;code&gt;public function save(CacheItemInterface $item) { if (!$item instanceof CacheItem) { return false; } if ($this-&gt;deferred) { $this-&gt;commit(); } $this-&gt;deferred[$item-&gt;getKey()] = $item; return $this-&gt;commit(); }&lt;/code&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>

這個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等,都沒有選擇遵循PSilluminate/cache

等,都沒有選擇遵循PS的考慮吧

回覆內容: 我現在在嘗試寫一個

PSR-6

的實作 當我在實現CacheItemPoolInterface接口時,對於save方法感到困惑,save方法只接收一個CacheItemInterface類型的參數,但是CacheItemInterface這個接口卻沒有提供類似getExpireTime的方法,這就導致

CacheItemPoolInterface

沒有辦法取得到快取項目的過期時間,也就沒辦法正確地將資料寫入到快取儲存中。 我看過幾個比較著名的PSR-6實現,例如 symfony/cache php-cache/cache tedious/Stash 然而這些實現版本在實現

save

方法時並不是非常優雅。 例如

symfony/cache

<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;code&gt;public function save(CacheItemInterface $item) { if (!$item instanceof CacheItem) { return false; } if ($this-&gt;deferred) { $this-&gt;commit(); } $this-&gt;deferred[$item-&gt;getKey()] = $item; return $this-&gt;commit(); }&lt;/code&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div> 這個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🎜等,都沒有選擇遵循🎜PS的考慮吧🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!