133 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			133 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | /** | ||
|  |  * Part of XML_XRD | ||
|  |  * | ||
|  |  * PHP version 5 | ||
|  |  * | ||
|  |  * @category XML | ||
|  |  * @package  XML_XRD | ||
|  |  * @author   Christian Weiske <cweiske@php.net> | ||
|  |  * @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 <cweiske@php.net> | ||
|  |  * @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; | ||
|  |     } | ||
|  | } | ||
|  | ?>
 |