* (c) 2004-2006 Sean Kerr * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * sfNamespacedParameterHolder provides a class for managing parameters * with support for namespaces. * * Parameters, in this case, are used to extend classes with additional data * that requires no additional logic to manage. * * @package symfony * @subpackage util * @author Fabien Potencier * @author Sean Kerr * @version SVN: $Id: sfNamespacedParameterHolder.class.php 29521 2010-05-19 11:47:56Z fabien $ */ class sfNamespacedParameterHolder extends sfParameterHolder { protected $default_namespace = null; protected $parameters = array(); /** * The constructor for sfNamespacedParameterHolder. * * The default namespace may be overridden at initialization as follows: * * * */ public function __construct($namespace = 'symfony/default') { $this->default_namespace = $namespace; } /** * Sets the default namespace value. * * @param string $namespace Default namespace * @param bool $move Move all values of the old default namespace to the new one or not */ public function setDefaultNamespace($namespace, $move = true) { if ($move) { if (null !== $values = $this->removeNamespace()) { $this->addByRef($values, $namespace); } } $this->default_namespace = $namespace; } /** * Get the default namespace value. * * The $default_namespace is defined as 'symfony/default'. * * @return string The default namespace */ public function getDefaultNamespace() { return $this->default_namespace; } /** * Clear all parameters associated with this request. */ public function clear() { $this->parameters = null; $this->parameters = array(); } /** * Retrieve a parameter with an optionally specified namespace. * * An isolated namespace may be identified by providing a value for the third * argument. If not specified, the default namespace 'symfony/default' is * used. * * @param string $name A parameter name * @param mixed $default A default parameter value * @param string $ns A parameter namespace * * @return mixed A parameter value, if the parameter exists, otherwise null */ public function & get($name, $default = null, $ns = null) { if (!$ns) { $ns = $this->default_namespace; } if (isset($this->parameters[$ns][$name])) { $value = & $this->parameters[$ns][$name]; } else { $value = $default; } return $value; } /** * Retrieve an array of parameter names from an optionally specified namespace. * * @param string $ns A parameter namespace. * * @return array An indexed array of parameter names, if the namespace exists, otherwise null */ public function getNames($ns = null) { if (!$ns) { $ns = $this->default_namespace; } if (isset($this->parameters[$ns])) { return array_keys($this->parameters[$ns]); } return array(); } /** * Retrieve an array of parameter namespaces. * * @return array An indexed array of parameter namespaces */ public function getNamespaces() { return array_keys($this->parameters); } /** * Retrieve an array of parameters, within a namespace. * * This method is limited to a namespace. Without any argument, * it returns the parameters of the default namespace. If a * namespace is passed as an argument, only the parameters of the * specified namespace are returned. * * @param string $ns A parameter namespace * * @return array An associative array of parameters */ public function & getAll($ns = null) { if (!$ns) { $ns = $this->default_namespace; } $parameters = array(); if (isset($this->parameters[$ns])) { $parameters = $this->parameters[$ns]; } return $parameters; } /** * Indicates whether or not a parameter exists. * * @param string $name A parameter name * @param string $ns A parameter namespace * * @return bool true, if the parameter exists, otherwise false */ public function has($name, $ns = null) { if (!$ns) { $ns = $this->default_namespace; } return isset($this->parameters[$ns][$name]); } /** * Indicates whether or not A parameter namespace exists. * * @param string $ns A parameter namespace * * @return bool true, if the namespace exists, otherwise false */ public function hasNamespace($ns) { return isset($this->parameters[$ns]); } /** * Remove a parameter. * * @param string $name A parameter name * @param mixed $default A default parameter value * @param string $ns A parameter namespace * * @return string A parameter value, if the parameter was removed, otherwise null */ public function remove($name, $default = null, $ns = null) { if (!$ns) { $ns = $this->default_namespace; } $retval = $default; if (isset($this->parameters[$ns]) && array_key_exists($name, $this->parameters[$ns])) { $retval = $this->parameters[$ns][$name]; unset($this->parameters[$ns][$name]); } return $retval; } /** * Remove A parameter namespace and all of its associated parameters. * * @param string $ns A parameter namespace. */ public function & removeNamespace($ns = null) { if (!$ns) { $ns = $this->default_namespace; } $retval = null; if (isset($this->parameters[$ns])) { $retval =& $this->parameters[$ns]; unset($this->parameters[$ns]); } return $retval; } /** * Set a parameter. * * If a parameter with the name already exists the value will be overridden. * * @param string $name A parameter name * @param mixed $value A parameter value * @param string $ns A parameter namespace */ public function set($name, $value, $ns = null) { if (!$ns) { $ns = $this->default_namespace; } if (!isset($this->parameters[$ns])) { $this->parameters[$ns] = array(); } $this->parameters[$ns][$name] = $value; } /** * Set a parameter by reference. * * If a parameter with the name already exists the value will be overridden. * * @param string $name A parameter name * @param mixed $value A reference to a parameter value * @param string $ns A parameter namespace */ public function setByRef($name, & $value, $ns = null) { if (!$ns) { $ns = $this->default_namespace; } if (!isset($this->parameters[$ns])) { $this->parameters[$ns] = array(); } $this->parameters[$ns][$name] =& $value; } /** * Set an array of parameters. * * If an existing parameter name matches any of the keys in the supplied * array, the associated value will be overridden. * * @param array $parameters An associative array of parameters and their associated values * @param string $ns A parameter namespace */ public function add($parameters, $ns = null) { if ($parameters === null) return; if (!$ns) { $ns = $this->default_namespace; } if (!isset($this->parameters[$ns])) { $this->parameters[$ns] = array(); } foreach ($parameters as $key => $value) { $this->parameters[$ns][$key] = $value; } } /** * Set an array of parameters by reference. * * If an existing parameter name matches any of the keys in the supplied * array, the associated value will be overridden. * * @param array $parameters An associative array of parameters and references to their associated values * @param string $ns A parameter namespace */ public function addByRef(& $parameters, $ns = null) { if (!$ns) { $ns = $this->default_namespace; } if (!isset($this->parameters[$ns])) { $this->parameters[$ns] = array(); } foreach ($parameters as $key => &$value) { $this->parameters[$ns][$key] =& $value; } } /** * Serializes the current instance. * * @return array Objects instance */ public function serialize() { return serialize(array($this->default_namespace, $this->parameters)); } /** * Unserializes a sfNamespacedParameterHolder instance. * * @param string $serialized A serialized sfNamespacedParameterHolder instance */ public function unserialize($serialized) { $data = unserialize($serialized); $this->default_namespace = $data[0]; $this->parameters = $data[1]; } }