Start · Sprachen · PHP · Referenz · is_countable

is_countable

Funktion

Prüft, ob eine Variable zählbar ist, d. h. ob <code>count()</code> darauf angewendet werden kann.

seit PHP 7.3.0 Kategorie: type

Signatur

is_countable(mixed $value): bool

Beschreibung

is_countable() gibt true zurück, wenn der übergebene Wert entweder ein array oder ein Objekt ist, das das Interface Countable implementiert. In allen anderen Fällen wird false zurückgegeben.

Die Funktion wurde eingeführt, um eine häufige Fehlerquelle zu beheben: Seit PHP 7.2 erzeugt ein Aufruf von count() auf nicht-zählbare Werte eine E_WARNING-Meldung. Mit is_countable() kann man sicher prüfen, ob ein Wert gezählt werden darf, bevor man count() aufruft.

Typische Anwendungsfälle sind die Prüfung von Rückgabewerten aus Funktionen oder Methoden, die entweder ein Array/eine Collection oder null bzw. einen skalaren Wert zurückgeben können. Statt umständlicher Typprüfungen mit is_array() und instanceof Countable bietet is_countable() eine kompakte Alternative.

Ab PHP 8.0 löst count() auf nicht-zählbaren Werten (außer null) einen TypeError aus, was die Verwendung von is_countable() noch wichtiger macht.

Parameter

Name Typ Default Beschreibung
$value Pflicht mixed Der zu prüfende Wert. Kann ein beliebiger PHP-Typ sein, also ein Array, Objekt, Skalar oder null.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn $value ein array ist oder ein Objekt, das Countable implementiert. Andernfalls wird false zurückgegeben.

Beispiele

Grundlegende Verwendung mit Arrays und Objekten

<?php
$array = [1, 2, 3];
$string = 'Hallo';
$null = null;

var_dump(is_countable($array));   // true
var_dump(is_countable($string));  // false
var_dump(is_countable($null));    // false

class MyCollection implements Countable {
    private array $items;

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

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

$collection = new MyCollection([10, 20, 30]);
var_dump(is_countable($collection)); // true
bool(true) bool(false) bool(false) bool(true)

Sicheres Zählen vor dem count()-Aufruf

<?php
function getItems(bool $valid): array|string {
    return $valid ? ['Apfel', 'Banane', 'Kirsche'] : 'Keine Daten';
}

$result = getItems(true);
if (is_countable($result)) {
    echo 'Anzahl der Elemente: ' . count($result) . PHP_EOL;
} else {
    echo 'Wert ist nicht zählbar: ' . $result . PHP_EOL;
}

$result = getItems(false);
if (is_countable($result)) {
    echo 'Anzahl der Elemente: ' . count($result) . PHP_EOL;
} else {
    echo 'Wert ist nicht zählbar: ' . $result . PHP_EOL;
}
Anzahl der Elemente: 3 Wert ist nicht zählbar: Keine Daten

// Wichtig · Fallstricke

PHP-Versionskompatibilität: Für PHP-Versionen vor 7.3 kann die Funktion selbst implementiert werden: function is_countable($value): bool { return is_array($value) || $value instanceof Countable; }

Verhalten bei null: is_countable(null) gibt false zurück. In PHP 7.x lieferte count(null) noch 0 mit einer E_WARNING, seit PHP 8.0 wirft es hingegen einen TypeError.

Achtung bei SimpleXMLElement: SimpleXMLElement implementiert Countable, weshalb is_countable() dafür true zurückgibt. Das Verhalten von count() auf SimpleXMLElement-Objekten kann jedoch unintuitiv sein.