You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

121 lines
2.4 KiB

<?php
/**
* @package Polylang
*/
/**
* An extremely simple non persistent cache system.
*
* @since 1.7
*
* @template TCacheData
*/
class PLL_Cache {
/**
* Current site id.
*
* @var int
*/
protected $blog_id;
/**
* The cache container.
*
* @var array
*
* @phpstan-var array<int, array<non-empty-string, TCacheData>>
*/
protected $cache = array();
/**
* Constructor.
*
* @since 1.7
*/
public function __construct() {
$this->blog_id = get_current_blog_id();
add_action( 'switch_blog', array( $this, 'switch_blog' ) );
}
/**
* Called when switching blog.
*
* @since 1.7
*
* @param int $new_blog_id New blog ID.
* @return void
*/
public function switch_blog( $new_blog_id ) {
$this->blog_id = $new_blog_id;
}
/**
* Adds a value in cache.
*
* @since 1.7
* @since 3.6 Returns the cached value.
*
* @param string $key Cache key.
* @param mixed $data The value to add to the cache.
* @return mixed
*
* @phpstan-param non-empty-string $key
* @phpstan-param TCacheData $data
* @phpstan-return TCacheData
*/
public function set( $key, $data ) {
$this->cache[ $this->blog_id ][ $key ] = $data;
return $data;
}
/**
* Returns value from cache.
*
* @since 1.7
*
* @param string $key Cache key.
* @return mixed
*
* @phpstan-param non-empty-string $key
* @phpstan-return TCacheData|false
*/
public function get( $key ) {
return isset( $this->cache[ $this->blog_id ][ $key ] ) ? $this->cache[ $this->blog_id ][ $key ] : false;
}
/**
* Cleans the cache (for this blog only).
*
* @since 1.7
*
* @param string $key Optional. Cache key. An empty string to clean the whole cache for the current blog.
* Default is an empty string.
* @return void
*/
public function clean( $key = '' ) {
if ( '' === $key ) {
unset( $this->cache[ $this->blog_id ] );
} else {
unset( $this->cache[ $this->blog_id ][ $key ] );
}
}
/**
* Generates and returns a "unique" cache key, depending on `$data` and prefixed by `$prefix`.
*
* @since 3.6
*
* @param string $prefix String to prefix the cache key.
* @param string|array|object $data Data.
* @return string
*
* @phpstan-param non-empty-string $prefix
* @phpstan-return non-empty-string
*/
public function get_unique_key( string $prefix, $data ): string {
/** @var scalar */
$serialized = maybe_serialize( $data );
return $prefix . md5( (string) $serialized );
}
}