src/LaravelKeenIO/Options/Options.php
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/
namespace LaravelKeenIO\Options;
class Options implements OptionsInterface
{
/** @var array */
protected $defaults = [];
/** @var array */
protected $options = [];
public function __construct(array $options = [])
{
$this->options = $this->mergeAssociative($this->defaults, $options);
}
/**
* Merge associative array
*
* @param array $a
* @param array $b
* @return array
*/
public function mergeAssociative(array $a, array $b)
{
$mergedArray = $a;
foreach ($b as $k => $v) {
if (is_array($v) && isset($a[$k]) && is_array($a[$k])) {
$mergedArray[$k] = $this->mergeAssociative($a[$k], $v);
} else {
$mergedArray[$k] = $v;
}
}
return $mergedArray;
}
/**
* @return array
*/
public function getDefaults()
{
return $this->defaults;
}
/**
* @param array $defaults
*/
public function setDefaults(array $defaults)
{
$this->defaults = $defaults;
}
/**
* @return array
*/
public function getOptions()
{
return $this->options;
}
/**
* @param array $options
*/
public function setOptions(array $options)
{
$this->options = $options;
}
/**
* Get value from key
*
* @param string $key
* @return array|mixed|null|string
*/
public function get($key)
{
if (!array_key_exists($key, $this->options)) {
return null;
}
/** @var string|array|mixed $options */
$options = $this->options[$key];
return $options;
}
/**
* Set value
*
* @param string $key
* @param mixed $value
* @return bool
*/
public function set($key, $value)
{
$this->options[$key] = $value;
return true;
}
}