[setting-value] ). * * @var array */ protected $settingsValues = array(); // for lazy loading of setting values private $settingValuesLoaded = false; /** * @var Backend\BackendInterface */ private $backend; /** * Defines whether a value has changed since the settings were loaded or not. * @var bool */ private $isDirty = false; public function __construct(Backend\BackendInterface $backend) { $this->backend = $backend; } /** * Get the currently used backend for this storage. * @return Backend\BackendInterface */ public function getBackend() { return $this->backend; } /** * Saves (persists) the current setting values in the database if a value has actually changed. */ public function save() { if ($this->isDirty) { $this->backend->save($this->settingsValues); $this->isDirty = false; Backend\Cache::clearCache(); } } /** * Returns the current value for a setting. If no value is stored, the default value * is be returned. * * @param string $key The name / key of a setting * @param mixed $defaultValue Default value that will be used in case no value for this setting exists yet * @param string $type The PHP internal type the value of the setting should have, see FieldConfig::TYPE_* * constants. Only an actual value of the setting will be converted to the given type, the * default value will not be converted. * @return mixed */ public function getValue($key, $defaultValue, $type) { $this->loadSettingsIfNotDoneYet(); if (array_key_exists($key, $this->settingsValues)) { settype($this->settingsValues[$key], $type); return $this->settingsValues[$key]; } return $defaultValue; } /** * Sets (overwrites) the value of a setting in memory. To persist the change across requests, {@link save()} must be * called. * * @param string $key The name / key of a setting * @param mixed $value The value that shall be set for the given setting. */ public function setValue($key, $value) { $this->loadSettingsIfNotDoneYet(); $this->isDirty = true; $this->settingsValues[$key] = $value; } private function loadSettingsIfNotDoneYet() { if ($this->settingValuesLoaded) { return; } $this->settingValuesLoaded = true; $this->settingsValues = $this->backend->load(); } }