*/
class MapCacheLRU {
/** @var array */
- protected $cache = array(); // (key => value)
+ protected $cache = []; // (key => value)
protected $maxCacheKeys; // integer; max entries
* If the item is already set, it will be pushed to the top of the cache.
*
* @param string $key
- * @return mixed
+ * @return mixed Returns null if the key was not found
*/
public function get( $key ) {
if ( !array_key_exists( $key, $this->cache ) ) {
return null;
}
+
$this->ping( $key );
+
return $this->cache[$key];
}
return array_keys( $this->cache );
}
+ /**
+ * Get an item with the given key, producing and setting it if not found.
+ *
+ * If the callback returns false, then nothing is stored.
+ *
+ * @since 1.28
+ * @param string $key
+ * @param callable $callback Callback that will produce the value
+ * @return mixed The cached value if found or the result of $callback otherwise
+ */
+ public function getWithSetCallback( $key, callable $callback ) {
+ if ( $this->has( $key ) ) {
+ $value = $this->get( $key );
+ } else {
+ $value = call_user_func( $callback );
+ if ( $value !== false ) {
+ $this->set( $key, $value );
+ }
+ }
+
+ return $value;
+ }
+
/**
* Clear one or several cache entries, or all cache entries
*
*/
public function clear( $keys = null ) {
if ( $keys === null ) {
- $this->cache = array();
+ $this->cache = [];
} else {
foreach ( (array)$keys as $key ) {
unset( $this->cache[$key] );