1<?php 2 3namespace Sabre\VObject; 4 5/** 6 * VObject ElementList 7 * 8 * This class represents a list of elements. Lists are the result of queries, 9 * such as doing $vcalendar->vevent where there's multiple VEVENT objects. 10 * 11 * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/). 12 * @author Evert Pot (http://evertpot.com/) 13 * @license http://sabre.io/license/ Modified BSD License 14 */ 15class ElementList implements \Iterator, \Countable, \ArrayAccess { 16 17 /** 18 * Inner elements 19 * 20 * @var array 21 */ 22 protected $elements = array(); 23 24 /** 25 * Creates the element list. 26 * 27 * @param array $elements 28 */ 29 public function __construct(array $elements) { 30 31 $this->elements = $elements; 32 33 } 34 35 /* {{{ Iterator interface */ 36 37 /** 38 * Current position 39 * 40 * @var int 41 */ 42 private $key = 0; 43 44 /** 45 * Returns current item in iteration 46 * 47 * @return Element 48 */ 49 public function current() { 50 51 return $this->elements[$this->key]; 52 53 } 54 55 /** 56 * To the next item in the iterator 57 * 58 * @return void 59 */ 60 public function next() { 61 62 $this->key++; 63 64 } 65 66 /** 67 * Returns the current iterator key 68 * 69 * @return int 70 */ 71 public function key() { 72 73 return $this->key; 74 75 } 76 77 /** 78 * Returns true if the current position in the iterator is a valid one 79 * 80 * @return bool 81 */ 82 public function valid() { 83 84 return isset($this->elements[$this->key]); 85 86 } 87 88 /** 89 * Rewinds the iterator 90 * 91 * @return void 92 */ 93 public function rewind() { 94 95 $this->key = 0; 96 97 } 98 99 /* }}} */ 100 101 /* {{{ Countable interface */ 102 103 /** 104 * Returns the number of elements 105 * 106 * @return int 107 */ 108 public function count() { 109 110 return count($this->elements); 111 112 } 113 114 /* }}} */ 115 116 /* {{{ ArrayAccess Interface */ 117 118 119 /** 120 * Checks if an item exists through ArrayAccess. 121 * 122 * @param int $offset 123 * @return bool 124 */ 125 public function offsetExists($offset) { 126 127 return isset($this->elements[$offset]); 128 129 } 130 131 /** 132 * Gets an item through ArrayAccess. 133 * 134 * @param int $offset 135 * @return mixed 136 */ 137 public function offsetGet($offset) { 138 139 return $this->elements[$offset]; 140 141 } 142 143 /** 144 * Sets an item through ArrayAccess. 145 * 146 * @param int $offset 147 * @param mixed $value 148 * @return void 149 */ 150 public function offsetSet($offset, $value) { 151 152 throw new \LogicException('You can not add new objects to an ElementList'); 153 154 } 155 156 /** 157 * Sets an item through ArrayAccess. 158 * 159 * This method just forwards the request to the inner iterator 160 * 161 * @param int $offset 162 * @return void 163 */ 164 public function offsetUnset($offset) { 165 166 throw new \LogicException('You can not remove objects from an ElementList'); 167 168 } 169 170 /* }}} */ 171 172} 173