315 lines
8.7 KiB
PHP
315 lines
8.7 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Core Cache implements an object cache.
|
||
|
*
|
||
|
* The Object Cache stores all of the cache data to memory only for the duration of the request.
|
||
|
*
|
||
|
* @package Core\Cache
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Core class that implements an object cache.
|
||
|
*
|
||
|
* The Object Cache is used to save on trips to the database. The
|
||
|
* Object Cache stores all of the cache data to memory and makes the cache
|
||
|
* contents available by using a key, which is used to name and later retrieve
|
||
|
* the cache contents.
|
||
|
*
|
||
|
* @private
|
||
|
*
|
||
|
* @package ET\Core\Cache
|
||
|
*/
|
||
|
final class ET_Core_Cache {
|
||
|
|
||
|
/**
|
||
|
* Cached data.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @type array
|
||
|
*/
|
||
|
private static $cache = array();
|
||
|
|
||
|
/**
|
||
|
* Adds data to the cache if it doesn't already exist.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What to call the contents in the cache.
|
||
|
* @param mixed $data The contents to store in the cache.
|
||
|
* @param string $group Optional. Where to group the cache contents. Default 'default'.
|
||
|
* @return bool False if cache key and group already exist, true on success
|
||
|
*/
|
||
|
public static function add( $key, $data, $group = 'default' ) {
|
||
|
if ( empty( $group ) ) {
|
||
|
$group = 'default';
|
||
|
}
|
||
|
|
||
|
if ( self::_exists( $key, $group ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return self::set( $key, $data, $group );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the data contents into the cache.
|
||
|
*
|
||
|
* The cache contents is grouped by the $group parameter followed by the
|
||
|
* $key. This allows for duplicate ids in unique groups.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What to call the contents in the cache.
|
||
|
* @param mixed $data The contents to store in the cache.
|
||
|
* @param string $group Optional. Where to group the cache contents. Default 'default'.
|
||
|
* @param int $expire Not Used.
|
||
|
* @return true Always returns true.
|
||
|
*/
|
||
|
public static function set( $key, $data, $group = 'default' ) {
|
||
|
if ( empty( $group ) ) {
|
||
|
$group = 'default';
|
||
|
}
|
||
|
|
||
|
if ( is_object( $data ) ) {
|
||
|
$data = clone $data;
|
||
|
}
|
||
|
|
||
|
self::$cache[ $group ][ $key ] = $data;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieves the cache contents, if it exists.
|
||
|
*
|
||
|
* The contents will be first attempted to be retrieved by searching by the
|
||
|
* key in the cache group. If the cache is hit (success) then the contents
|
||
|
* are returned.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What the contents in the cache are called.
|
||
|
* @param string $group Optional. Where the cache contents are grouped. Default 'default'.
|
||
|
* @return false|mixed False on failure to retrieve contents or the cache contents on success.
|
||
|
*/
|
||
|
public static function get( $key, $group = 'default' ) {
|
||
|
if ( empty( $group ) ) {
|
||
|
$group = 'default';
|
||
|
}
|
||
|
|
||
|
if ( self::_exists( $key, $group ) ) {
|
||
|
if ( is_object( self::$cache[ $group ][ $key ] ) ) {
|
||
|
return clone self::$cache[ $group ][ $key ];
|
||
|
} else {
|
||
|
return self::$cache[ $group ][ $key ];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieves the cache contents for entire group, if it exists.
|
||
|
*
|
||
|
* If the cache is hit (success) then the contents of the group
|
||
|
* are returned.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $group Where the cache contents are grouped.
|
||
|
* @return false|mixed False on failure to retrieve contents or the cache contents on success.
|
||
|
*/
|
||
|
public static function get_group( $group ) {
|
||
|
if ( isset( self::$cache[ $group ] ) ) {
|
||
|
return self::$cache[ $group ];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check the cache contents, if given key and (optional) group exists.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What the contents in the cache are called.
|
||
|
* @param string $group Optional. Where the cache contents are grouped. Default 'default'.
|
||
|
* @return bool False on failure to retrieve contents or True on success.
|
||
|
*/
|
||
|
public static function has( $key, $group = 'default' ) {
|
||
|
if ( empty( $group ) ) {
|
||
|
$group = 'default';
|
||
|
}
|
||
|
return self::_exists( $key, $group );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Removes the contents of the cache key in the group.
|
||
|
*
|
||
|
* If the cache key does not exist in the group, then nothing will happen.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What the contents in the cache are called.
|
||
|
* @param string $group Optional. Where the cache contents are grouped. Default 'default'.
|
||
|
* @return bool False if the contents weren't deleted and true on success.
|
||
|
*/
|
||
|
public static function delete( $key, $group = 'default' ) {
|
||
|
if ( empty( $group ) ) {
|
||
|
$group = 'default';
|
||
|
}
|
||
|
|
||
|
if ( ! self::_exists( $key, $group ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
unset( self::$cache[ $group ][ $key ] );
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Clears the object cache of all data.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @return true Always returns true.
|
||
|
*/
|
||
|
public static function flush() {
|
||
|
self::$cache = array();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Serves as a utility function to determine whether a key exists in the cache.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @private
|
||
|
*
|
||
|
* @param int|string $key Cache key to check for existence.
|
||
|
* @param string $group Cache group for the key existence check.
|
||
|
* @return bool Whether the key exists in the cache for the given group.
|
||
|
*/
|
||
|
private static function _exists( $key, $group ) {
|
||
|
return isset( self::$cache[ $group ] ) && isset( self::$cache[ $group ][ $key ] );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if ( ! function_exists( 'et_core_cache_add' ) ) :
|
||
|
/**
|
||
|
* Adds data to the cache if it doesn't already exist.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What to call the contents in the cache.
|
||
|
* @param mixed $data The contents to store in the cache.
|
||
|
* @param string $group Optional. Where to group the cache contents. Default 'default'.
|
||
|
* @return bool False if cache key and group already exist, true on success
|
||
|
*/
|
||
|
function et_core_cache_add( $key, $data, $group = '' ) {
|
||
|
return ET_Core_Cache::add( $key, $data, $group );
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'et_core_cache_set' ) ) :
|
||
|
/**
|
||
|
* Sets the data contents into the cache.
|
||
|
*
|
||
|
* The cache contents is grouped by the $group parameter followed by the
|
||
|
* $key. This allows for duplicate ids in unique groups.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What to call the contents in the cache.
|
||
|
* @param mixed $data The contents to store in the cache.
|
||
|
* @param string $group Optional. Where to group the cache contents. Default 'default'.
|
||
|
* @param int $expire Not Used.
|
||
|
* @return true Always returns true.
|
||
|
*/
|
||
|
function et_core_cache_set( $key, $data, $group = '' ) {
|
||
|
return ET_Core_Cache::set( $key, $data, $group );
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'et_core_cache_get' ) ) :
|
||
|
/**
|
||
|
* Retrieves the cache contents, if it exists.
|
||
|
*
|
||
|
* The contents will be first attempted to be retrieved by searching by the
|
||
|
* key in the cache group. If the cache is hit (success) then the contents
|
||
|
* are returned.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What the contents in the cache are called.
|
||
|
* @param string $group Optional. Where the cache contents are grouped. Default 'default'.
|
||
|
* @return false|mixed False on failure to retrieve contents or the cache contents on success.
|
||
|
*/
|
||
|
function et_core_cache_get( $key, $group = '' ) {
|
||
|
return ET_Core_Cache::get( $key, $group );
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'et_core_cache_get_group' ) ) :
|
||
|
/**
|
||
|
* Retrieves the cache contents for entire group, if it exists.
|
||
|
*
|
||
|
* If the cache is hit (success) then the contents of the group
|
||
|
* are returned.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $group Where the cache contents are grouped.
|
||
|
* @return false|mixed False on failure to retrieve contents or the cache contents on success.
|
||
|
*/
|
||
|
function et_core_cache_get_group( $group ) {
|
||
|
return ET_Core_Cache::get_group( $group );
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'et_core_cache_has' ) ) :
|
||
|
/**
|
||
|
* Check the cache contents, if given key and (optional) group exists.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What the contents in the cache are called.
|
||
|
* @param string $group Optional. Where the cache contents are grouped. Default 'default'.
|
||
|
* @return bool False on failure to retrieve contents or True on success.
|
||
|
*/
|
||
|
function et_core_cache_has( $key, $group = '' ) {
|
||
|
return ET_Core_Cache::has( $key, $group );
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'et_core_cache_delete' ) ) :
|
||
|
/**
|
||
|
* Removes the contents of the cache key in the group.
|
||
|
*
|
||
|
* If the cache key does not exist in the group, then nothing will happen.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param int|string $key What the contents in the cache are called.
|
||
|
* @param string $group Optional. Where the cache contents are grouped. Default 'default'.
|
||
|
* @return bool False if the contents weren't deleted and true on success.
|
||
|
*/
|
||
|
function et_core_cache_delete( $key, $group = '' ) {
|
||
|
return ET_Core_Cache::delete( $key, $group );
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'et_core_cache_flush' ) ) :
|
||
|
/**
|
||
|
* Clears the object cache of all data.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @return true Always returns true.
|
||
|
*/
|
||
|
function et_core_cache_flush() {
|
||
|
return ET_Core_Cache::flush();
|
||
|
}
|
||
|
endif;
|