Overview

Packages

  • Xml
    • Element

Classes

  • Horde_Xml_Element
  • Horde_Xml_Element_Exception
  • Horde_Xml_Element_List
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * @author   Chuck Hagenbuch <chuck@horde.org>
  4:  * @license  http://www.horde.org/licenses/bsd BSD
  5:  * @category Horde
  6:  * @package  Xml_Element
  7:  */
  8: 
  9: /**
 10:  * @author   Chuck Hagenbuch <chuck@horde.org>
 11:  * @license  http://www.horde.org/licenses/bsd BSD
 12:  * @category Horde
 13:  * @package  Xml_Element
 14:  */
 15: abstract class Horde_Xml_Element_List extends Horde_Xml_Element implements Countable, Iterator
 16: {
 17:     /**
 18:      * Cache of list items.
 19:      * @var array
 20:      */
 21:     protected $_listItems;
 22: 
 23:     /**
 24:      * Current index on the collection of list items for the Iterator
 25:      * implementation.
 26:      * @var integer
 27:      */
 28:     protected $_listItemIndex = 0;
 29: 
 30:     /**
 31:      * The classname for individual list items.
 32:      * @var string
 33:      */
 34:     protected $_listItemClassName = 'Horde_Xml_Element';
 35: 
 36:     /**
 37:      * Ensure that $_listItems is populated by calling the concrete implementation's
 38:      * _buildItemsCache() method.
 39:      */
 40:     public function __wakeup()
 41:     {
 42:         parent::__wakeup();
 43: 
 44:         $this->_listItems = $this->_buildListItemCache();
 45:     }
 46: 
 47:     /**
 48:      * Called by __wakeup to cache list items. Must be implemented in the
 49:      * extending class to return the array of list items.
 50:      * @return array
 51:      */
 52:     abstract protected function _buildListItemCache();
 53: 
 54:     /**
 55:      * Get the number of items in this list.
 56:      *
 57:      * @return integer Item count.
 58:      */
 59:     public function count()
 60:     {
 61:         return count($this->_listItems);
 62:     }
 63: 
 64:     /**
 65:      * Required by the Iterator interface.
 66:      *
 67:      * @internal
 68:      */
 69:     public function rewind()
 70:     {
 71:         $this->_listItemIndex = 0;
 72:     }
 73: 
 74:     /**
 75:      * Required by the Iterator interface.
 76:      *
 77:      * @internal
 78:      *
 79:      * @return mixed The current row, or null if no rows.
 80:      */
 81:     public function current()
 82:     {
 83:         return new $this->_listItemClassName(
 84:             $this->_listItems[$this->_listItemIndex]);
 85:     }
 86: 
 87:     /**
 88:      * Required by the Iterator interface.
 89:      *
 90:      * @internal
 91:      *
 92:      * @return mixed The current row number (starts at 0), or null if no rows
 93:      */
 94:     public function key()
 95:     {
 96:         return $this->_listItemIndex;
 97:     }
 98: 
 99:     /**
100:      * Required by the Iterator interface.
101:      *
102:      * @internal
103:      *
104:      * @return mixed The next row, or null if no more rows.
105:      */
106:     public function next()
107:     {
108:         ++$this->_listItemIndex;
109:     }
110: 
111:     /**
112:      * Required by the Iterator interface.
113:      *
114:      * @internal
115:      *
116:      * @return boolean Whether the iteration is valid
117:      */
118:     public function valid()
119:     {
120:         return (0 <= $this->_listItemIndex && $this->_listItemIndex < count($this->_listItems));
121:     }
122: 
123: }
124: 
API documentation generated by ApiGen