* @license http://www.gnu.org/copyleft/lesser.html LGPL * @link http://pear.php.net/package/XML_XRD */ require_once 'XML/XRD/LogicException.php'; require_once 'XML/XRD/Element/Property.php'; /** * Provides ArrayAccess to extending classes (XML_XRD and XML_XRD_Element_Link). * * By extending PropertyAccess, access to properties is possible with * "$object['propertyType']" array access notation. * * @category XML * @package XML_XRD * @author Christian Weiske * @license http://www.gnu.org/copyleft/lesser.html LGPL * @version Release: @package_version@ * @link http://pear.php.net/package/XML_XRD */ abstract class XML_XRD_PropertyAccess implements ArrayAccess { /** * Array of property objects * * @var array */ public $properties = array(); /** * Check if the property with the given type exists * * Part of the ArrayAccess interface * * @param string $type Property type to check for * * @return boolean True if it exists */ public function offsetExists($type) { foreach ($this->properties as $prop) { if ($prop->type == $type) { return true; } } return false; } /** * Return the highest ranked property with the given type * * Part of the ArrayAccess interface * * @param string $type Property type to check for * * @return string Property value or NULL if empty */ public function offsetGet($type) { foreach ($this->properties as $prop) { if ($prop->type == $type) { return $prop->value; } } return null; } /** * Not implemented. * * Part of the ArrayAccess interface * * @param string $type Property type to check for * @param string $value New property value * * @return void * * @throws XML_XRD_LogicException Always */ public function offsetSet($type, $value) { throw new XML_XRD_LogicException('Changing properties not implemented'); } /** * Not implemented. * * Part of the ArrayAccess interface * * @param string $type Property type to check for * * @return void * * @throws XML_XRD_LogicException Always */ public function offsetUnset($type) { throw new XML_XRD_LogicException('Changing properties not implemented'); } /** * Get all properties with the given type * * @param string $type Property type to filter by * * @return array Array of XML_XRD_Element_Property objects */ public function getProperties($type = null) { if ($type === null) { return $this->properties; } $properties = array(); foreach ($this->properties as $prop) { if ($prop->type == $type) { $properties[] = $prop; } } return $properties; } } ?>