tv-1.0.x-dev/src/Entity/Collection/EntityCollection.php

src/Entity/Collection/EntityCollection.php
<?php

namespace Drupal\tv\Entity\Collection;

use ArrayAccess;
use ArrayIterator;
use Countable;
use Drupal\tv\Entity\Entity;
use SeekableIterator;
use Serializable;
use Traversable;

abstract class EntityCollection implements SeekableIterator, ArrayAccess, Serializable, Countable {

    private ArrayIterator $iterator;
    protected array $data = [];

    public function append($item)
    {
        $this->data[] = $item;
    }

    public function getIterator(): Traversable
    {
        if (!isset($this->iterator)) {
            $this->iterator = new ArrayIterator($this->data);
        }
        return $this->iterator;
    }

    public function offsetExists(mixed $offset): bool
    {
        return isset($this->data[$offset]);
    }

    public function offsetGet(mixed $offset): mixed
    {
        return $this->data[$offset];
    }

    public function offsetSet(mixed $offset, mixed $value): void
    {
        $this->data[$offset] = $value;
    }

    public function offsetUnset(mixed $offset): void
    {
        unset($this->data[$offset]);
    }


    public function count(): int
    {
        return count($this->data);
    }

    public function serialize(): string
    {
        return serialize($this->data);
    }

    public function unserialize(string $data)
    {
        $this->data = unserialize($data);
    }

    public function __serialize(): array
    {
        return $this->data;
    }

    public function __unserialize(array $data): void
    {
        $this->data = $data;
    }

    abstract public function current(): Entity;

    public function next(): void
    {
        $this->getIterator()->next();
    }

    public function key(): mixed
    {
        return $this->getIterator()->key();
    }

    public function valid(): bool
    {
        return $this->getIterator()->valid();
    }

    public function rewind(): void
    {
        $this->getIterator()->rewind();
    }

    public function seek(int $offset): void
    {
        $this->getIterator()->seek($offset);
    }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc