Observium_CE/libs/Phpfastcache8/Config/ConfigurationOption.php

390 lines
9.5 KiB
PHP

<?php
/**
*
* This file is part of phpFastCache.
*
* @license MIT License (MIT)
*
* For full copyright and license information, please see the docs/CREDITS.txt file.
*
* @author Khoa Bui (khoaofgod) <khoaofgod@gmail.com> https://www.phpfastcache.com
* @author Georges.L (Geolim4) <contact@geolim4.com>
*
*/
declare(strict_types=1);
namespace Phpfastcache\Config;
use Phpfastcache\Exceptions\PhpfastcacheInvalidConfigurationException;
use Phpfastcache\Util\ArrayObject;
use ReflectionException;
use ReflectionMethod;
use ReflectionParameter;
use TypeError;
/**
* Class ConfigurationOption
* @package Phpfastcache\Config
*/
class ConfigurationOption extends ArrayObject implements ConfigurationOptionInterface
{
/**
* @var bool
*/
protected $itemDetailedDate = false;
/**
* @var bool
*/
protected $autoTmpFallback = false;
/**
* @var int
*/
protected $defaultTtl = 900;
/**
* @var string|Callable
*/
protected $defaultKeyHashFunction = 'md5';
/**
* @var string|Callable
*/
protected $defaultFileNameHashFunction = 'md5';
/**
* @var int
*/
protected $defaultChmod = 0777;
/**
* @var string
*/
protected $path = '';
/**
* @var int
*/
protected $limitedMemoryByObject = 4096;
/**
* @var bool
*/
protected $compressData = false;
/**
* @var bool
*/
protected $preventCacheSlams = false;
/**
* @var int
*/
protected $cacheSlamsTimeout = 15;
/**
* @var bool
*/
protected $useStaticItemCaching = true;
/**
* @param $args
* ArrayObject constructor.
* @throws PhpfastcacheInvalidConfigurationException
* @throws ReflectionException
*/
public function __construct(...$args)
{
parent::__construct(...$args);
$array =& $this->getArray();
/**
* Detect unwanted keys and throw an exception.
* No more kidding now, it's 21th century.
*/
if (\array_diff_key($array, \get_object_vars($this))) {
throw new PhpfastcacheInvalidConfigurationException(
sprintf(
'Invalid option(s) for the config %s: %s',
static::class,
\implode(', ', \array_keys(\array_diff_key($array, \get_object_vars($this))))
)
);
}
foreach (\get_object_vars($this) as $property => $value) {
if (\array_key_exists($property, $array)) {
$this->$property = &$array[$property];
} else {
$array[$property] = &$this->$property;
}
}
foreach (\get_class_methods($this) as $method) {
if (\strpos($method, 'set') === 0) {
$value = null;
try {
/**
* We use property instead of getter
* because of is/get conditions and
* to allow us to retrieve the value
* in catch statement bloc
*/
$value = $this->{\lcfirst(\substr($method, 3))};
$this->{$method}($value);
} catch (TypeError $e) {
$typeHintGot = \is_object($value) ? \get_class($value) : \gettype($value);
$reflectionMethod = new ReflectionMethod($this, $method);
$parameter = $reflectionMethod->getParameters()[0] ?? null;
$typeHintExpected = ($parameter instanceof ReflectionParameter ? ($parameter->getType()->getName() === 'object' ? $parameter->getClass() : $parameter->getType(
)->getName()) : 'Unknown type');
throw new PhpfastcacheInvalidConfigurationException(
\sprintf(
'Invalid type hint found for "%s", expected "%s" got "%s"',
\lcfirst(\substr($method, 3)),
$typeHintExpected,
$typeHintGot
)
);
}
}
}
}
/**
* @param string $optionName
* @return mixed|null
*/
public function isValidOption(string $optionName)
{
return property_exists($this, $optionName);
}
/**
* @return bool
*/
public function isItemDetailedDate(): bool
{
return $this->itemDetailedDate;
}
/**
* @param bool $itemDetailedDate
* @return ConfigurationOption
*/
public function setItemDetailedDate(bool $itemDetailedDate): self
{
$this->itemDetailedDate = $itemDetailedDate;
return $this;
}
/**
* @return bool
*/
public function isAutoTmpFallback(): bool
{
return $this->autoTmpFallback;
}
/**
* @param bool $autoTmpFallback
* @return ConfigurationOption
*/
public function setAutoTmpFallback(bool $autoTmpFallback): self
{
$this->autoTmpFallback = $autoTmpFallback;
return $this;
}
/**
* @return int
*/
public function getDefaultTtl(): int
{
return $this->defaultTtl;
}
/**
* @param int $defaultTtl
* @return ConfigurationOption
*/
public function setDefaultTtl(int $defaultTtl): self
{
$this->defaultTtl = $defaultTtl;
return $this;
}
/**
* @return Callable|string
*/
public function getDefaultKeyHashFunction()
{
return $this->defaultKeyHashFunction;
}
/**
* @param Callable|string $defaultKeyHashFunction
* @return ConfigurationOption
* @throws PhpfastcacheInvalidConfigurationException
*/
public function setDefaultKeyHashFunction($defaultKeyHashFunction): self
{
if ($defaultKeyHashFunction && !\is_callable($defaultKeyHashFunction) && (\is_string($defaultKeyHashFunction) && !\function_exists($defaultKeyHashFunction))) {
throw new PhpfastcacheInvalidConfigurationException('defaultKeyHashFunction must be a valid function name string');
}
$this->defaultKeyHashFunction = $defaultKeyHashFunction;
return $this;
}
/**
* @return Callable|string
*/
public function getDefaultFileNameHashFunction()
{
return $this->defaultFileNameHashFunction;
}
/**
* @param Callable|string $defaultFileNameHashFunction
* @return ConfigurationOption
* @throws PhpfastcacheInvalidConfigurationException
*/
public function setDefaultFileNameHashFunction($defaultFileNameHashFunction): self
{
if (!\is_callable($defaultFileNameHashFunction) && (\is_string($defaultFileNameHashFunction) && !\function_exists($defaultFileNameHashFunction))) {
throw new PhpfastcacheInvalidConfigurationException('defaultFileNameHashFunction must be a valid function name string');
}
$this->defaultFileNameHashFunction = $defaultFileNameHashFunction;
return $this;
}
/**
* @return int
*/
public function getDefaultChmod(): int
{
return $this->defaultChmod;
}
/**
* @param int $defaultChmod
* @return ConfigurationOption
*/
public function setDefaultChmod(int $defaultChmod): self
{
$this->defaultChmod = $defaultChmod;
return $this;
}
/**
* @return string
*/
public function getPath(): string
{
return $this->path;
}
/**
* @param string $path
* @return ConfigurationOption
*/
public function setPath(string $path): self
{
$this->path = $path;
return $this;
}
/**
* @return int
*/
public function getLimitedMemoryByObject(): int
{
return $this->limitedMemoryByObject;
}
/**
* @param int $limitedMemoryByObject
* @return ConfigurationOption
*/
public function setLimitedMemoryByObject(int $limitedMemoryByObject): self
{
$this->limitedMemoryByObject = $limitedMemoryByObject;
return $this;
}
/**
* @return bool
*/
public function isCompressData(): bool
{
return $this->compressData;
}
/**
* @param bool $compressData
* @return ConfigurationOption
*/
public function setCompressData(bool $compressData): self
{
$this->compressData = $compressData;
return $this;
}
/**
* @return bool
*/
public function isPreventCacheSlams(): bool
{
return $this->preventCacheSlams;
}
/**
* @param bool $preventCacheSlams
* @return ConfigurationOption
*/
public function setPreventCacheSlams(bool $preventCacheSlams): self
{
$this->preventCacheSlams = $preventCacheSlams;
return $this;
}
/**
* @return int
*/
public function getCacheSlamsTimeout(): int
{
return $this->cacheSlamsTimeout;
}
/**
* @param int $cacheSlamsTimeout
* @return ConfigurationOption
*/
public function setCacheSlamsTimeout(int $cacheSlamsTimeout): self
{
$this->cacheSlamsTimeout = $cacheSlamsTimeout;
return $this;
}
/**
* @return bool
*/
public function isUseStaticItemCaching(): bool
{
return $this->useStaticItemCaching;
}
/**
* @param bool $useStaticItemCaching
* @return ConfigurationOption
*/
public function setUseStaticItemCaching(bool $useStaticItemCaching): self
{
$this->useStaticItemCaching = $useStaticItemCaching;
return $this;
}
}