$value) { if ($recursive && is_array($value)) { $obj->$key = static::from($value, true); } else { $obj->$key = $value; } } return $obj; } /** * Returns an iterator over all items. * @return \RecursiveArrayIterator */ public function getIterator() { return new \RecursiveArrayIterator((array) $this); } /** * Returns items count. * @return int */ public function count() { return count((array) $this); } /** * Replaces or appends a item. * @return void */ public function offsetSet($key, $value) { if (!is_scalar($key)) { // prevents null throw new Nette\InvalidArgumentException(sprintf('Key must be either a string or an integer, %s given.', gettype($key))); } $this->$key = $value; } /** * Returns a item. * @return mixed */ public function offsetGet($key) { return $this->$key; } /** * Determines whether a item exists. * @return bool */ public function offsetExists($key) { return isset($this->$key); } /** * Removes the element from this list. * @return void */ public function offsetUnset($key) { unset($this->$key); } }