Signatur
Beschreibung
IntlIterator ist eine interne PHP-Klasse, die das Iterator-Interface implementiert und als Basisklasse für Iterator-Objekte der intl-Erweiterung dient. Sie wird typischerweise nicht direkt instanziiert, sondern von Methoden wie IntlBreakIterator::createCharacterInstance() oder ähnlichen Fabrikmethoden zurückgegeben.
Da die Klasse das standardmäßige PHP-Iterator-Interface implementiert, können Instanzen direkt in foreach-Schleifen verwendet werden. Dies erleichtert das Durchlaufen von internationalisierten Textelementen wie Zeichen, Wörtern oder Sätzen gemäß Unicode-Regeln.
Typische Anwendungsfälle sind die Iteration über Textsegmente mithilfe eines IntlBreakIterator, beispielsweise um einen Text nach Unicode-Regeln in Wörter oder Sätze zu zerlegen. Die Klasse folgt den üblichen Iterator-Konventionen von PHP (current(), key(), next(), rewind(), valid()).
Hinweis: Die Klasse wird in der Regel nicht direkt in Benutzercode verwendet; stattdessen wird ein Iterator-Objekt von einer der Factory-Methoden der intl-Erweiterung zurückgegeben.
Beispiele
Text mit IntlBreakIterator nach Wörtern iterieren
<?php
// Einen wortbasierten BreakIterator für Deutsch erstellen
$breakIterator = IntlBreakIterator::createWordInstance('de_DE');
$breakIterator->setText('Hallo Welt, wie geht es dir?');
// IntlIterator über die Textsegmente holen
$iterator = $breakIterator->getPartsIterator();
foreach ($iterator as $part) {
// Leerzeichen und Satzzeichen überspringen
if (trim($part) !== '' && !preg_match('/^\p{P}+$/u', $part)) {
echo $part . PHP_EOL;
}
}
Manuelle Verwendung der Iterator-Methoden
<?php
$breakIterator = IntlBreakIterator::createSentenceInstance('de_DE');
$breakIterator->setText('Das ist Satz eins. Das ist Satz zwei. Und ein dritter.');
$iterator = $breakIterator->getPartsIterator();
$iterator->rewind();
while ($iterator->valid()) {
echo 'Satz: ' . trim($iterator->current()) . PHP_EOL;
$iterator->next();
}
// Wichtig · Fallstricke
Direkte Instanziierung: IntlIterator kann nicht sinnvoll direkt instanziiert werden. Objekte dieser Klasse werden stets von internen intl-Methoden zurückgegeben, z. B. IntlBreakIterator::getPartsIterator().
Erweiterung: Die intl-Erweiterung muss in PHP aktiviert sein (üblicherweise über --enable-intl oder das Paket php-intl). Fehlt die Erweiterung, steht diese Klasse nicht zur Verfügung.
Unicode-Korrektheit: Im Gegensatz zu einfachen String-Funktionen berücksichtigt IntlIterator in Kombination mit einem passenden IntlBreakIterator die Unicode-Segmentierungsregeln, was für mehrsprachige Anwendungen essenziell ist.