/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php
https://gitlab.com/jjpa2018/dashboard · PHP · 218 lines · 88 code · 31 blank · 99 comment · 5 complexity · 0584f6e21cb1f4466ce01d2ec2abfa97 MD5 · raw file
- <?php
- namespace Illuminate\Cache;
- use Illuminate\Contracts\Cache\LockProvider;
- use Illuminate\Support\InteractsWithTime;
- class ArrayStore extends TaggableStore implements LockProvider
- {
- use InteractsWithTime, RetrievesMultipleKeys;
- /**
- * The array of stored values.
- *
- * @var array
- */
- protected $storage = [];
- /**
- * The array of locks.
- *
- * @var array
- */
- public $locks = [];
- /**
- * Indicates if values are serialized within the store.
- *
- * @var bool
- */
- protected $serializesValues;
- /**
- * Create a new Array store.
- *
- * @param bool $serializesValues
- * @return void
- */
- public function __construct($serializesValues = false)
- {
- $this->serializesValues = $serializesValues;
- }
- /**
- * Retrieve an item from the cache by key.
- *
- * @param string|array $key
- * @return mixed
- */
- public function get($key)
- {
- if (! isset($this->storage[$key])) {
- return;
- }
- $item = $this->storage[$key];
- $expiresAt = $item['expiresAt'] ?? 0;
- if ($expiresAt !== 0 && $this->currentTime() > $expiresAt) {
- $this->forget($key);
- return;
- }
- return $this->serializesValues ? unserialize($item['value']) : $item['value'];
- }
- /**
- * Store an item in the cache for a given number of seconds.
- *
- * @param string $key
- * @param mixed $value
- * @param int $seconds
- * @return bool
- */
- public function put($key, $value, $seconds)
- {
- $this->storage[$key] = [
- 'value' => $this->serializesValues ? serialize($value) : $value,
- 'expiresAt' => $this->calculateExpiration($seconds),
- ];
- return true;
- }
- /**
- * Increment the value of an item in the cache.
- *
- * @param string $key
- * @param mixed $value
- * @return int
- */
- public function increment($key, $value = 1)
- {
- if (! is_null($existing = $this->get($key))) {
- return tap(((int) $existing) + $value, function ($incremented) use ($key) {
- $value = $this->serializesValues ? serialize($incremented) : $incremented;
- $this->storage[$key]['value'] = $value;
- });
- }
- $this->forever($key, $value);
- return $value;
- }
- /**
- * Decrement the value of an item in the cache.
- *
- * @param string $key
- * @param mixed $value
- * @return int
- */
- public function decrement($key, $value = 1)
- {
- return $this->increment($key, $value * -1);
- }
- /**
- * Store an item in the cache indefinitely.
- *
- * @param string $key
- * @param mixed $value
- * @return bool
- */
- public function forever($key, $value)
- {
- return $this->put($key, $value, 0);
- }
- /**
- * Remove an item from the cache.
- *
- * @param string $key
- * @return bool
- */
- public function forget($key)
- {
- if (array_key_exists($key, $this->storage)) {
- unset($this->storage[$key]);
- return true;
- }
- return false;
- }
- /**
- * Remove all items from the cache.
- *
- * @return bool
- */
- public function flush()
- {
- $this->storage = [];
- return true;
- }
- /**
- * Get the cache key prefix.
- *
- * @return string
- */
- public function getPrefix()
- {
- return '';
- }
- /**
- * Get the expiration time of the key.
- *
- * @param int $seconds
- * @return int
- */
- protected function calculateExpiration($seconds)
- {
- return $this->toTimestamp($seconds);
- }
- /**
- * Get the UNIX timestamp for the given number of seconds.
- *
- * @param int $seconds
- * @return int
- */
- protected function toTimestamp($seconds)
- {
- return $seconds > 0 ? $this->availableAt($seconds) : 0;
- }
- /**
- * Get a lock instance.
- *
- * @param string $name
- * @param int $seconds
- * @param string|null $owner
- * @return \Illuminate\Contracts\Cache\Lock
- */
- public function lock($name, $seconds = 0, $owner = null)
- {
- return new ArrayLock($this, $name, $seconds, $owner);
- }
- /**
- * Restore a lock instance using the owner identifier.
- *
- * @param string $name
- * @param string $owner
- * @return \Illuminate\Contracts\Cache\Lock
- */
- public function restoreLock($name, $owner)
- {
- return $this->lock($name, 0, $owner);
- }
- }