JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrlist = new Vector(); $this->setType($type); if (!empty($data)) { foreach ($data as $item) { $this->add($item); } } } /** * Возвращает тип объектов в коллекции * * @return string */ public function getType(): string { return $this->type; } /** * Устанавливает тип объектов в коллекции * * @param string $type * @return $this */ public function setType(string $type): self { if ($this->type !== null && $type !== $this->type && !$this->isEmpty()) { throw new InvalidArgumentException('You cannot change the type of a non-empty ListObject'); } if (class_exists($type) && is_subclass_of($type, AbstractObject::class)) { $this->type = $type; $this->isTypeInstantiable = (new ReflectionClass($type))->isInstantiable(); } else { throw new InvalidArgumentException('Invalid item type for ListObject'); } return $this; } /** * Добавляет объект в коллекцию * * @param mixed $item * @return $this */ public function add(mixed $item): self { if (is_array($item)) { if (!$this->isTypeInstantiable) { throw new InvalidArgumentException( 'You cannot add item-array to a ListObject if the type is not instantiable' ); } $this->list->push(new $this->type($item)); return $this; } if ($item instanceof $this->type) { $this->list->push($item); } else { throw new InvalidArgumentException( 'You cannot add not ' . $this->type . ' object to a ListObject' ); } return $this; } /** * Добавляет массив объектов в коллекцию * * @param iterable $data * @return $this */ public function merge(iterable $data): self { foreach ($data as $item) { $this->add($item); } return $this; } /** * Удаляет объект из коллекции по индексу * * @param int $index * @return $this */ public function remove(int $index): self { $this->list->offsetUnset($index); return $this; } /** * Очищает коллекцию * * @return $this */ public function clear(): self { $this->list->clear(); return $this; } /** * Проверка на пустую коллекцию * * @return bool */ public function isEmpty(): bool { return $this->list->isEmpty(); } /** * Возвращает коллекцию * * @return Vector */ public function getItems(): Vector { return $this->list; } /** * Возвращает объект коллекции по индексу * * @param int $index * @return AbstractObject */ public function get(int $index): AbstractObject { return $this->list->get($index); } /** * Возвращает количество объектов в коллекции * * @return int */ public function count(): int { return $this->list->count(); } #[\ReturnTypeWillChange] public function offsetExists(mixed $offset) { return $this->list->offsetExists($offset); } #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) { return $this->list->offsetGet($offset); } #[\ReturnTypeWillChange] public function offsetSet(mixed $offset, mixed $value) { $this->list->offsetSet($offset, $value); } #[\ReturnTypeWillChange] public function offsetUnset(mixed $offset) { $this->list->offsetUnset($offset); } /** * Возвращает коллекцию в виде массива * * @return array */ public function jsonSerialize(): array { $result = []; foreach ($this->list as $item) { $result[] = $item->jsonSerialize(); } return $result; } /** * Возвращает коллекцию в виде массива * * @return array */ public function toArray(): array { return $this->jsonSerialize(); } /** * @return Vector */ public function getIterator(): Vector { return $this->list; } }