From adb9a7864e6fce08426af0b41bbc726388e296a7 Mon Sep 17 00:00:00 2001 From: xue <> Date: Sat, 21 Jan 2006 15:16:28 +0000 Subject: --- framework/Collections/TAttributeCollection.php | 113 +++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 framework/Collections/TAttributeCollection.php (limited to 'framework/Collections') diff --git a/framework/Collections/TAttributeCollection.php b/framework/Collections/TAttributeCollection.php new file mode 100644 index 00000000..c8870919 --- /dev/null +++ b/framework/Collections/TAttributeCollection.php @@ -0,0 +1,113 @@ + + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Revision: $ $Date: $ + * @package System.Collections + */ + +/** + * Includes TMap class + */ +Prado::using('System.Collections.TMap'); + +/** + * TAttributeCollection class + * + * TAttributeCollection implements a collection for storing attribute names and values. + * + * Besides all functionalities provided by {@link TMap}, TAttributeCollection + * allows you to get and set attribute values like getting and setting + * properties. For example, the following usages are all valid for a + * TAttributeCollection object: + * + * $collection->Text='text'; + * echo $collection->Text; + * + * They are equivalent to the following: + * + * $collection->add('Text','text'); + * echo $collection->itemAt('Text'); + * + * + * Note, attribute names are case-insensitive. They are converted to lower-case + * in the collection storage. + * + * @author Qiang Xue + * @version $Revision: $ $Date: $ + * @package System.Collections + * @since 3.0 + */ +class TAttributeCollection extends TMap +{ + /** + * Returns a property value or an event handler list by property or event name. + * This method overrides the parent implementation by returning + * a key value if the key exists in the collection. + * @param string the property name or the event name + * @return mixed the property value or the event handler list + * @throws TInvalidOperationException if the property/event is not defined. + */ + public function __get($name) + { + $name=strtolower($name); + return $this->contains($name)?$this->itemAt($name):parent::__get($name); + } + + /** + * Sets value of a component property. + * This method overrides the parent implementation by adding a new key value + * to the collection. + * @param string the property name or event name + * @param mixed the property value or event handler + * @throws TInvalidOperationException If the property is not defined or read-only. + */ + public function __set($name,$value) + { + $this->add(strtolower($name),$value); + } + + /** + * Determines whether a property is defined. + * This method overrides parent implementation by returning true + * if the collection contains the named key. + * @param string the property name + * @return boolean whether the property is defined + */ + public function hasProperty($name) + { + $name=strtolower($name); + return $this->contains($name) || parent::hasProperty($name); + } + + /** + * Determines whether a property can be read. + * This method overrides parent implementation by returning true + * if the collection contains the named key. + * @param string the property name + * @return boolean whether the property can be read + */ + public function canGetProperty($name) + { + $name=strtolower($name); + return $this->contains($name) || parent::canGetProperty($name); + } + + /** + * Determines whether a property can be set. + * This method overrides parent implementation by always returning true + * because you can always add a new value to the collection. + * @param string the property name + * @return boolean true + */ + public function canSetProperty($name) + { + return true; + } +} + +?> \ No newline at end of file -- cgit v1.2.3