Mercurial > hg > isophonics-drupal-site
view core/lib/Drupal/Core/State/State.php @ 19:fa3358dc1485 tip
Add ndrum files
author | Chris Cannam |
---|---|
date | Wed, 28 Aug 2019 13:14:47 +0100 |
parents | 129ea1e6d783 |
children |
line wrap: on
line source
<?php namespace Drupal\Core\State; use Drupal\Core\KeyValueStore\KeyValueFactoryInterface; /** * Provides the state system using a key value store. */ class State implements StateInterface { /** * The key value store to use. * * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface */ protected $keyValueStore; /** * Static state cache. * * @var array */ protected $cache = []; /** * Constructs a State object. * * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory * The key value store to use. */ public function __construct(KeyValueFactoryInterface $key_value_factory) { $this->keyValueStore = $key_value_factory->get('state'); } /** * {@inheritdoc} */ public function get($key, $default = NULL) { $values = $this->getMultiple([$key]); return isset($values[$key]) ? $values[$key] : $default; } /** * {@inheritdoc} */ public function getMultiple(array $keys) { $values = []; $load = []; foreach ($keys as $key) { // Check if we have a value in the cache. if (isset($this->cache[$key])) { $values[$key] = $this->cache[$key]; } // Load the value if we don't have an explicit NULL value. elseif (!array_key_exists($key, $this->cache)) { $load[] = $key; } } if ($load) { $loaded_values = $this->keyValueStore->getMultiple($load); foreach ($load as $key) { // If we find a value, even one that is NULL, add it to the cache and // return it. if (isset($loaded_values[$key]) || array_key_exists($key, $loaded_values)) { $values[$key] = $loaded_values[$key]; $this->cache[$key] = $loaded_values[$key]; } else { $this->cache[$key] = NULL; } } } return $values; } /** * {@inheritdoc} */ public function set($key, $value) { $this->cache[$key] = $value; $this->keyValueStore->set($key, $value); } /** * {@inheritdoc} */ public function setMultiple(array $data) { foreach ($data as $key => $value) { $this->cache[$key] = $value; } $this->keyValueStore->setMultiple($data); } /** * {@inheritdoc} */ public function delete($key) { $this->deleteMultiple([$key]); } /** * {@inheritdoc} */ public function deleteMultiple(array $keys) { foreach ($keys as $key) { unset($this->cache[$key]); } $this->keyValueStore->deleteMultiple($keys); } /** * {@inheritdoc} */ public function resetCache() { $this->cache = []; } }