gnu-social/plugins/LRDD/extlib/XML/XRD/PropertyAccess.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;
}
}
?>