(dev/core#174) CRM_Utils_Cache_Interface::get() should match PSR-16
authorTim Otten <totten@civicrm.org>
Tue, 19 Jun 2018 22:09:08 +0000 (15:09 -0700)
committerTim Otten <totten@civicrm.org>
Wed, 27 Jun 2018 21:29:52 +0000 (14:29 -0700)
Comparing `CRM_Utils_Cache_Interface::get()` and `Psr\SimpleCache\CacheInterface::get()`,
they agree on key details:

1. They return values are `mixed` (strings, arrays, numbers,, etc)
2. The default representation of a cache-miss is NULL.

They differ in that PSR-16 allows the caller to optionally specify a `$default`.

Since no existing callers actually use this, we can (for moment) throw an
error if someone tries to pass `$default` to a driver that doesn't support
it.

See also: https://www.php-fig.org/psr/psr-16/

CRM/Utils/Cache/APCcache.php
CRM/Utils/Cache/ArrayCache.php
CRM/Utils/Cache/Interface.php
CRM/Utils/Cache/Memcache.php
CRM/Utils/Cache/Memcached.php
CRM/Utils/Cache/NoCache.php
CRM/Utils/Cache/Redis.php
CRM/Utils/Cache/SerializeCache.php
CRM/Utils/Cache/SqlGroup.php

index e696aa19c3d2cd884fe2f69fab52070918f9caf0..64c1de94b685ee5454e064502c543e3e0aa6af66 100644 (file)
@@ -84,10 +84,14 @@ class CRM_Utils_Cache_APCcache implements CRM_Utils_Cache_Interface {
 
   /**
    * @param $key
+   * @param mixed $default
    *
    * @return mixed
    */
-  public function get($key) {
+  public function get($key, $default = NULL) {
+    if ($default !== NULL) {
+      throw new \RuntimeException("FIXME: " . __CLASS__ . "::get() only supports NULL default");
+    }
     return apc_fetch($this->_prefix . $key);
   }
 
index b2272fa1eb6c9879f5a195ccad2e2a5426a00291..1c1b2b297997c2d778ff59623d9bdf4dbb0f3dc4 100644 (file)
@@ -63,11 +63,12 @@ class CRM_Utils_Cache_Arraycache implements CRM_Utils_Cache_Interface {
 
   /**
    * @param string $key
+   * @param mixed $default
    *
    * @return mixed
    */
-  public function get($key) {
-    return CRM_Utils_Array::value($key, $this->_cache);
+  public function get($key, $default = NULL) {
+    return CRM_Utils_Array::value($key, $this->_cache, $default);
   }
 
   /**
index f11327cb59c730d4f85eaab883e8a1d5c027efcd..d1d1576a3b8812b67872c5009fe0cdc02df23c1c 100644 (file)
@@ -69,10 +69,11 @@ interface CRM_Utils_Cache_Interface {
    * Get a value from the cache.
    *
    * @param string $key
+   * @param mixed $default
    * @return mixed
-   *   NULL if $key has not been previously set
+   *   The previously set value value, or $default (NULL).
    */
-  public function get($key);
+  public function get($key, $default = NULL);
 
   /**
    * Delete a value from the cache.
index 630589e3d86158066718d0c222b208ec3c6a7ffd..85a1376500c98f7972643c044e61782b6acec36e 100644 (file)
@@ -121,10 +121,14 @@ class CRM_Utils_Cache_Memcache implements CRM_Utils_Cache_Interface {
 
   /**
    * @param $key
+   * @param mixed $default
    *
    * @return mixed
    */
-  public function &get($key) {
+  public function get($key, $default = NULL) {
+    if ($default !== NULL) {
+      throw new \RuntimeException("FIXME: " . __CLASS__ . "::get() only supports NULL default");
+    }
     $result = $this->_cache->get($this->_prefix . $key);
     return $result;
   }
index 07315e53cebef86ed27db0a92d3920e745cfa280..c6531544836ad29c9d52fd44c2b881e17d393c19 100644 (file)
@@ -126,10 +126,14 @@ class CRM_Utils_Cache_Memcached implements CRM_Utils_Cache_Interface {
 
   /**
    * @param $key
+   * @param mixed $default
    *
    * @return mixed
    */
-  public function &get($key) {
+  public function get($key, $default = NULL) {
+    if ($default !== NULL) {
+      throw new \RuntimeException("FIXME: " . __CLASS__ . "::get() only supports NULL default");
+    }
     $key = $this->cleanKey($key);
     $result = $this->_cache->get($key);
     return $result;
index 66c6b74cff410ec6280e951843140dde66409bde..a7adecbe73e0a7d6b065a3ff753f062476bb4698 100644 (file)
@@ -63,11 +63,12 @@ class CRM_Utils_Cache_NoCache implements CRM_Utils_Cache_Interface {
 
   /**
    * @param string $key
+   * @param mixed $default
    *
    * @return null
    */
-  public function get($key) {
-    return NULL;
+  public function get($key, $default = NULL) {
+    return $default;
   }
 
   /**
index 4988b8beef8d946312cdeb4833aa2eb3a6616993..27fcb159a1fccecc32a5456c870137fe0c71ad40 100644 (file)
@@ -133,12 +133,13 @@ class CRM_Utils_Cache_Redis implements CRM_Utils_Cache_Interface {
 
   /**
    * @param $key
+   * @param mixed $default
    *
    * @return mixed
    */
-  public function get($key) {
+  public function get($key, $default = NULL) {
     $result = $this->_cache->get($this->_prefix . $key);
-    return ($result === FALSE) ? NULL : unserialize($result);
+    return ($result === FALSE) ? $default : unserialize($result);
   }
 
   /**
index 6164694c3e5cc5eb5263ce0dd08d4ed4801fc746..7ee639bd60f2e578973800811ad782ec30d42d75 100644 (file)
@@ -67,10 +67,15 @@ class CRM_Utils_Cache_SerializeCache implements CRM_Utils_Cache_Interface {
 
   /**
    * @param string $key
+   * @param mixed $default
    *
    * @return mixed
    */
-  public function get($key) {
+  public function get($key, $default = NULL) {
+    if ($default !== NULL) {
+      throw new \RuntimeException("FIXME: " . __CLASS__ . "::get() only supports NULL default");
+    }
+
     if (array_key_exists($key, $this->_cache)) {
       return $this->_cache[$key];
     }
index 0bb8e98e277a5ee090184a7889027bc9b81e845a..402614b8f867e82030ac7e7ff4ba2a7bdaf54dcb 100644 (file)
@@ -97,10 +97,14 @@ class CRM_Utils_Cache_SqlGroup implements CRM_Utils_Cache_Interface {
 
   /**
    * @param string $key
+   * @param mixed $default
    *
    * @return mixed
    */
-  public function get($key) {
+  public function get($key, $default = NULL) {
+    if ($default !== NULL) {
+      throw new \RuntimeException("FIXME: " . __CLASS__ . "::get() only supports NULL default");
+    }
     if (!array_key_exists($key, $this->frontCache)) {
       $this->frontCache[$key] = CRM_Core_BAO_Cache::getItem($this->group, $key, $this->componentID);
     }