PSR6 합리성 논의

WBOY
풀어 주다: 2016-08-08 09:06:50
원래의
994명이 탐색했습니다.

지금은 PSR-6

구현을 작성하려고 합니다.

CacheItemPoolInterface 인터페이스를 구현할 때 save 메소드에 대해 혼란스러웠습니다. save 메소드는 CacheItemInterface 유형의 매개변수만 받았지만 CacheItemInterface 인터페이스는 유사한 메소드를 제공하지 않았습니다. getExpireTime 로 인해 CacheItemPoolInterface 은 캐시 항목의 만료 시간을 얻을 수 없어 캐시 저장소에 데이터를 올바르게 쓸 수 없게 됩니다.

symfony/cache php-cache/cache tedious/Stash와 같은 잘 알려진 여러 PSR-6 구현을 본 적이 있지만 이러한 구현 버전은 save 메서드를 구현할 때 그다지 우아하지 않습니다.

예를 들어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>
로그인 후 복사
로그인 후 복사

save 메서드는 SymfonyComponentCacheCacheItem 유형의 매개변수만 전달할 수 있습니다. 다른 유형을 전달하면 false이 반환됩니다.

현재 상황은 캐싱을 사용하는 클래스 라이브러리를 작성하려면 PSR-6뿐만 아니라 특정 psr/cache 구현을 종속성으로 지정해야 한다는 것입니다. 반면, PSR-3 로그 인터페이스를 보면, 로깅 기능이 필요한 클래스 라이브러리를 작성하려면 psr/log만 도입하면 되고, 특별한 구현은 필요하지 않습니다.

제 생각에는 PSR-6에는 CacheItemInterface 인터페이스가 필요하지 않으며 save 메서드를 save($key, $value, $expire_at)으로 변경하면 됩니다.

packagist에서 캐시를 검색해 보니 doctrine/cache sonata-project/cache illuminate/cache 등 일부 잘 알려진 캐시 라이브러리가 PSR-6을 따르기로 선택하지 않았습니다.

답글 내용:

지금은 PSR-6

구현을 작성하려고 합니다.

CacheItemPoolInterface 인터페이스를 구현할 때 save 메소드에 대해 혼란스러웠습니다. save 메소드는 CacheItemInterface 유형의 매개변수만 받았지만 CacheItemInterface 인터페이스는 유사한 메소드를 제공하지 않았습니다. getExpireTime 로 인해 CacheItemPoolInterface 은 캐시 항목의 만료 시간을 얻을 수 없어 캐시 저장소에 데이터를 올바르게 쓸 수 없게 됩니다.

symfony/cache php-cache/cache tedious/Stash와 같은 잘 알려진 여러 PSR-6 구현을 본 적이 있지만 이러한 구현 버전은 save 메서드를 구현할 때 그다지 우아하지 않습니다.

예를 들어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>
로그인 후 복사
로그인 후 복사

save 메서드는 SymfonyComponentCacheCacheItem 유형의 매개변수만 전달할 수 있습니다. 다른 유형을 전달하면 false이 반환됩니다.

현재 상황은 캐싱을 사용하는 클래스 라이브러리를 작성하려면 PSR-6뿐만 아니라 특정 psr/cache 구현을 종속성으로 지정해야 한다는 것입니다. 반면, PSR-3 로그 인터페이스를 보면, 로깅 기능이 필요한 클래스 라이브러리를 작성하려면 psr/log만 도입하면 되고, 특별한 구현은 필요하지 않습니다.

제 생각에는 PSR-6에는 CacheItemInterface 인터페이스가 필요하지 않으며 save 메서드를 save($key, $value, $expire_at)으로 변경하면 됩니다.

packagist에서 캐시를 검색해 보니 doctrine/cache sonata-project/cache illuminate/cache 등 일부 잘 알려진 캐시 라이브러리가 PSR-6을 따르기로 선택하지 않았습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿