PSR一覧
PSR-5 / PSR-6 / PSR-11 / PSR-12 / PSR-14 / PSR-16
2015/08/20現在、AcceptされたPSRは0,1,2,3,4,7の5種類です。
このうちPSR-4はPSR-0の置き換えなので実質4種類となります。
まあここらへんは解説記事たくさんあるのでいいでしょう。
で、現在PSR-6 Caching Interfaceというのがレビュー中です。
PSR-6はキャッシュを扱うInterfaceです。
キャッシュは現状フレームワークによって実装が全く違うので、各フレームワークに特化した書き方をしなければならず、再利用性が全くありません。
// Zend Framweork2
$cache = Zend\Cache\StorageFactory::adapterFactory('apc', ['ttl' => 3600]);
$cache->setItem('key', 'value');
$item = $cache->getItem('key', $success);
$cache->removeItem('key');
// CakePHP 2.x
Cache::config('short', [ 'engine' => 'Apc', 'duration' => '+1 hours' ]);
Cache::write('key', 'value');
$item = Cache::read('key');
Cache::delete('key');
// CodeIgniter
$this->load->driver('cache', ['adapter' => 'apc']);
$this->cache->save('key', 'item', 3600);
$item = $this->cache->get('key');
$this->cache->delete('key');
// Phalcon
$cache = new \Phalcon\Cache\Backend\Apc(
new \Phalcon\Cache\Frontend\Data([ 'lifetime' => 3600 ]),
[ 'prefix' => 'prefix']
);
$cache->save('key', 'value');
$item = $cache->get('key');
$cache->delete('key');
これがPSR-6対応になれば、どんなフレームワークでもだいたい同じ書き方になります。
// PSR-6
$cache = new CacheItemPool('apc');
$cache->save( (new CacheItem('key'))->set('value', 3600) );
$item = $cache->getItem('key');
$cache->deleteItems(['key']);
PSR-6が決めているのはInterfaceだけなので、実装の中身は各FWによって違うため、CacheItemPoolやCacheItemは違う名前になる可能性があります。
しかしその中身はPsr\Cache\CacheItemInterface
を実装しているので、同じメソッドが存在していることが保証されます。
これでキャッシュ部分の仕様については、ソースの使い回しができるようになりました。
実際問題そのまま使い回したり、もしくは何処かで言われてるように、PSRで複数のFWを混ぜて使うようになるなんてことがあるかというと、まず無いと思いますが。
そういやPsr\Cache\CacheItemInterface::__construct()
が未定義だからキーの渡し方がこれで合ってる保証はないな。
なんで定義されてないんだろ?
あとまだDraftなPSRが5,8,9,10とありますが、5以外はちょっと意味がよくわかりません。