Signatur
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
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;
}
// 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.