_item; } /** * Collection constructor. * * @param ActiveQuery $query * @param array $array * @param ModelInterface|null $model */ public function __construct(public ActiveQuery $query, public ?ModelInterface $model = null, array $array = []) { $this->_item = $array; parent::__construct(); } /** * @return int */ #[Pure] public function getLength(): int { return count($this->_item); } /** * @param $item */ public function setItems($item): void { $this->_item = $item; } /** * @param $model */ public function setModel($model): void { $this->model = $model; } /** * @param $item */ public function addItem($item): void { $this->_item[] = $item; } /** * @return Traversable|CollectionIterator|ArrayIterator * @throws */ public function getIterator(): Traversable|CollectionIterator|ArrayIterator { return new CollectionIterator($this->model, $this->_item); } /** * @return mixed * @throws */ public function getModel(): ModelInterface { return $this->model; } /** * @return ActiveQuery */ public function makeNewQuery(): ActiveQuery { return $this->model::query(); } /** * @param mixed $offset * @return bool */ public function offsetExists(mixed $offset): bool { return !empty($this->_item) && isset($this->_item[$offset]); } /** * @param mixed $offset * @return ModelInterface|null * @throws */ public function offsetGet(mixed $offset): ?ModelInterface { if (!$this->offsetExists($offset)) { return NULL; } if (!($this->_item[$offset] instanceof ModelInterface)) { return $this->model->populates($this->_item[$offset]); } return $this->_item[$offset]; } /** * @param mixed $offset * @param mixed $value */ #[ReturnTypeWillChange] public function offsetSet(mixed $offset, mixed $value): void { $this->_item[$offset] = $value; } /** * @param mixed $offset */ #[ReturnTypeWillChange] public function offsetUnset(mixed $offset): void { if ($this->offsetExists($offset)) { unset($this->_item[$offset]); } } }