Start · Sprachen · PHP · Referenz · Ds\Collection

Ds\Collection

Interface

Basis-Interface für alle Datenstrukturen der <code>Ds</code>-Erweiterung, das gemeinsame Grundoperationen wie Kopieren, Leeren und Konvertierung definiert.

seit PHP 1.0.0 Kategorie: oop

Signatur

interface Ds\Collection extends Countable, IteratorAggregate, JsonSerializable

Beschreibung

Ds\Collection ist das zentrale Basis-Interface der Data Structures (ds)-Erweiterung für PHP. Es bildet die gemeinsame Schnittstelle für alle konkreten Datenstrukturen wie Ds\Vector, Ds\Deque, Ds\Map, Ds\Set und andere.

Durch die Ableitung von Countable, IteratorAggregate und JsonSerializable garantiert jede Implementierung, dass Elemente gezählt, iteriert und per json_encode() serialisiert werden können. Eigene Datenstrukturen können dieses Interface implementieren, um sich nahtlos in das Ds-Ökosystem einzufügen.

Das Interface schreibt grundlegende Methoden vor, die jede Ds-Datenstruktur beherrschen muss: clear() zum Leeren, copy() zum flachen Kopieren, isEmpty() zur Leerheitsprüfung sowie toArray() zur Umwandlung in ein natives PHP-Array.

  • clear() – Entfernt alle Elemente aus der Datenstruktur.
  • copy() – Erstellt eine flache Kopie der Datenstruktur.
  • isEmpty() – Gibt true zurück, wenn keine Elemente vorhanden sind.
  • toArray() – Konvertiert die Datenstruktur in ein PHP-Array.

Beispiele

Gemeinsame Operationen über das Collection-Interface

<?php
require 'vendor/autoload.php'; // oder PECL ds-Erweiterung

$vector = new Ds\Vector([1, 2, 3, 4, 5]);
$set    = new Ds\Set([10, 20, 30]);

// Beide implementieren Ds\Collection
function describeCollection(Ds\Collection $col): void {
    echo 'Anzahl Elemente: ' . count($col) . PHP_EOL;
    echo 'Leer? ' . ($col->isEmpty() ? 'ja' : 'nein') . PHP_EOL;
    echo 'Array: ' . implode(', ', $col->toArray()) . PHP_EOL;
    echo PHP_EOL;
}

describeCollection($vector);
describeCollection($set);
Anzahl Elemente: 5 Leer? nein Array: 1, 2, 3, 4, 5 Anzahl Elemente: 3 Leer? nein Array: 10, 20, 30

Eigene Klasse, die Ds\Collection implementiert

<?php
class MyCollection implements Ds\Collection {
    private array $items;

    public function __construct(array $items = []) {
        $this->items = array_values($items);
    }

    public function clear(): void {
        $this->items = [];
    }

    public function copy(): static {
        return new static($this->items);
    }

    public function isEmpty(): bool {
        return empty($this->items);
    }

    public function toArray(): array {
        return $this->items;
    }

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

    public function getIterator(): ArrayIterator {
        return new ArrayIterator($this->items);
    }

    public function jsonSerialize(): mixed {
        return $this->items;
    }
}

$col = new MyCollection([7, 8, 9]);
echo count($col) . PHP_EOL;       // 3
echo json_encode($col) . PHP_EOL; // [7,8,9]

$copy = $col->copy();
$col->clear();
echo $col->isEmpty() ? 'leer' : 'nicht leer'; // leer
echo PHP_EOL;
echo count($copy); // 3
3 [7,8,9] leer 3

// Wichtig · Fallstricke

Voraussetzung: Die ds-Erweiterung muss installiert sein (pecl install ds) oder alternativ das Polyfill-Paket php-ds/php-ds via Composer eingebunden werden. In Standard-PHP ist diese Erweiterung nicht enthalten.

Flache Kopie: copy() erstellt nur eine flache (shallow) Kopie. Objekte innerhalb der Sammlung werden nicht geklont – Änderungen an enthaltenen Objekten wirken sich auf Original und Kopie aus.

PHP 8.x Kompatibilität: Die ds-Erweiterung wird für PHP 8.x aktiv gepflegt, aber prüfe die Versionskompatibilität bei einem Upgrade.