Start · Sprachen · PHP · Referenz · Countable

Countable

Interface

Interface für Klassen, deren Instanzen mit <code>count()</code> gezählt werden können.

seit PHP 5.1.0 Kategorie: misc

Signatur

interface Countable

Beschreibung

Countable ist ein eingebautes PHP-Interface, das eine einzige Methode vorschreibt: count(). Klassen, die dieses Interface implementieren, können direkt mit der PHP-Funktion count() verwendet werden – PHP ruft dabei automatisch die count()-Methode der Klasse auf und gibt deren Rückgabewert zurück.

Dieses Interface ist besonders nützlich für eigene Container- oder Sammlungsklassen (z. B. Listen, Warteschlangen, Repositories), bei denen es semantisch sinnvoll ist, die Anzahl enthaltener Elemente abzufragen. Durch die Implementierung von Countable verhält sich die eigene Klasse konsistent mit nativen PHP-Arrays und anderen Datenstrukturen der Standardbibliothek.

Viele SPL-Klassen wie SplStack, SplQueue oder ArrayObject implementieren Countable bereits. In Verbindung mit dem Interface IteratorAggregate oder Iterator lässt sich eine vollständig array-ähnliche eigene Klasse aufbauen.

Ab PHP 7.2 gibt count() eine Warnung aus, wenn ein Objekt übergeben wird, das Countable nicht implementiert – daher sollte das Interface konsequent genutzt werden, wenn Objekte zählbar sein sollen.

Beispiele

Eigene Sammlungsklasse mit Countable

<?php

class Warenkorb implements Countable
{
    private array $artikel = [];

    public function hinzufuegen(string $artikel): void
    {
        $this->artikel[] = $artikel;
    }

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

$warenkorb = new Warenkorb();
$warenkorb->hinzufuegen('Apfel');
$warenkorb->hinzufuegen('Banane');
$warenkorb->hinzufuegen('Orange');

echo count($warenkorb); // Gibt 3 aus
3

Countable zusammen mit IteratorAggregate

<?php

class Benutzerliste implements Countable, IteratorAggregate
{
    private array $benutzer = [];

    public function hinzufuegen(string $name): void
    {
        $this->benutzer[] = $name;
    }

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

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

$liste = new Benutzerliste();
$liste->hinzufuegen('Alice');
$liste->hinzufuegen('Bob');

echo 'Anzahl Benutzer: ' . count($liste) . PHP_EOL;

foreach ($liste as $name) {
    echo '- ' . $name . PHP_EOL;
}
Anzahl Benutzer: 2 - Alice - Bob

// Wichtig · Fallstricke

Rückgabetyp der count()-Methode: Die Methode muss einen int zurückgeben. Negative Werte sind technisch möglich, aber semantisch unsinnig und sollten vermieden werden.

PHP 7.2+: Wird count() auf ein Objekt angewendet, das Countable nicht implementiert, erzeugt PHP eine E_WARNING-Warnung. Ab PHP 8.0 kann dies je nach Konfiguration noch strenger behandelt werden.

Rekursives Zählen: Die globale PHP-Funktion count() unterstützt einen zweiten Parameter COUNT_RECURSIVE, der bei eigenen Countable-Objekten jedoch ignoriert wird – die Klasse selbst ist für die korrekte Zählung verantwortlich.