Signatur
Beschreibung
is_iterable() gibt true zurück, wenn der übergebene Wert entweder ein array ist oder ein Objekt, das das Interface Traversable implementiert (z. B. Instanzen von Iterator, IteratorAggregate oder Generator). In allen anderen Fällen – also bei null, Zahlen, Strings, Booleans oder gewöhnlichen Objekten ohne Traversable – wird false zurückgegeben.
Die Funktion ist besonders nützlich, wenn Code generisch geschrieben werden soll, der sowohl Arrays als auch Traversable-Objekte verarbeitet. Statt manuell mit is_array() und instanceof Traversable zu prüfen, bietet is_iterable() eine kompakte, gut lesbare Alternative.
Typischerweise wird is_iterable() eingesetzt, bevor eine foreach-Schleife über einen möglicherweise nicht iterierbaren Wert ausgeführt wird, um einen TypeError oder eine Warning zu vermeiden. In typsicheren Projekten kann es als Laufzeit-Absicherung ergänzend zum Typ-System dienen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value Pflicht | mixed | Der zu prüfende Wert beliebigen Typs. |
Rückgabewert
true zurück, wenn value ein array ist oder ein Objekt, das Traversable implementiert. Andernfalls false.Beispiele
Grundlegende Verwendung mit verschiedenen Typen
<?php
$array = [1, 2, 3];
$generator = (function() { yield 1; yield 2; })();
$string = 'Hallo';
$object = new stdClass();
var_dump(is_iterable($array)); // true – Array
var_dump(is_iterable($generator)); // true – Generator implementiert Traversable
var_dump(is_iterable($string)); // false – String ist nicht iterierbar
var_dump(is_iterable($object)); // false – stdClass implementiert kein Traversable
var_dump(is_iterable(null)); // false
Sichere foreach-Schleife mit is_iterable()
<?php
function verarbeiteElemente(mixed $daten): void
{
if (!is_iterable($daten)) {
throw new InvalidArgumentException(
'Es wird ein iterierbarer Wert erwartet, ' . gettype($daten) . ' übergeben.'
);
}
foreach ($daten as $element) {
echo $element . PHP_EOL;
}
}
verarbeiteElemente(['Apfel', 'Birne', 'Kirsche']);
// Löst eine Exception aus:
// verarbeiteElemente('kein Array');
Prüfung eines ArrayIterator-Objekts
<?php
$iterator = new ArrayIterator([10, 20, 30]);
if (is_iterable($iterator)) {
foreach ($iterator as $wert) {
echo $wert . ' ';
}
}
// Wichtig · Fallstricke
Äquivalenz: is_iterable($value) entspricht dem Ausdruck is_array($value) || ($value instanceof Traversable). Die eingebaute Funktion ist jedoch lesbarer und direkt auf den Pseudotyp iterable abgestimmt, der in PHP 7.1 eingeführt wurde.
Kein Deep-Check: is_iterable() überprüft nur, ob der Wert grundsätzlich iterierbar ist, nicht ob er leer ist oder bestimmte Elemente enthält. Für leere Arrays gibt die Funktion ebenfalls true zurück.
Nicht zu verwechseln mit is_array(): Objekte, die Traversable implementieren, sind iterierbar, aber keine Arrays. is_array() würde für diese false liefern.