Das Beispiel top
Es soll möglich sein einen String, also eine Zeichenkette, und zusätzlich noch einen “Trenner” dem Klassenkonstruktor zu übergeben. Danach kann durch die Ergebnisse durch iteriert werden. Etwas Code:
<?php
$woerter = new Parser('Lorem ipsum dolor sit amet', ' ');
foreach($woerter as $v)
{
echo $v, '<br />';
}
?>
$woerter = new Parser('Lorem ipsum dolor sit amet', ' ');
foreach($woerter as $v)
{
echo $v, '<br />';
}
?>
soll das ausgegeben:
Lorem
ipsum
dolor
sit
amet
Und die eigentliche Klasse:
<?php
class Parser
implements Iterator
{
//Behälter für das Ergebnis
protected $_results = array();
//Positionszähler für das aktuelle Ergebnis
protected $_pos = 0;
//Konstruktor
public function __construct($input, $delimiter = ' ')
{
$this->_results = explode($delimiter, trim($input));
}
//***Methoden des Iterator-Interfaces***
//Gib den aktuellen Wert zurück
public function current()
{
return $this->_results[$this->_pos];
}
//Gib den aktuellen Index zurück
public function key()
{
return $this->_pos;
}
//Gehe zum nächsten Eintrag
public function next()
{
++$this->_pos;
}
//Setze Position zurück
public function rewind()
{
$this->_pos = 0;
}
//Ist die aktuelle Position valide, also vorhanden?
public function valid()
{
return isset($this->_results[$this->_pos]);
}
}
?>
class Parser
implements Iterator
{
//Behälter für das Ergebnis
protected $_results = array();
//Positionszähler für das aktuelle Ergebnis
protected $_pos = 0;
//Konstruktor
public function __construct($input, $delimiter = ' ')
{
$this->_results = explode($delimiter, trim($input));
}
//***Methoden des Iterator-Interfaces***
//Gib den aktuellen Wert zurück
public function current()
{
return $this->_results[$this->_pos];
}
//Gib den aktuellen Index zurück
public function key()
{
return $this->_pos;
}
//Gehe zum nächsten Eintrag
public function next()
{
++$this->_pos;
}
//Setze Position zurück
public function rewind()
{
$this->_pos = 0;
}
//Ist die aktuelle Position valide, also vorhanden?
public function valid()
{
return isset($this->_results[$this->_pos]);
}
}
?>
Der Code ist gut Kommentiert, sollten jedoch Fragen auftreten einfach fragen.
Einsatzgebiete top
Mögliche Einsatzgebiete sind zum Beispiel Datenbank-Klassen, die ihre Daten über das Iterator-Interface anbieten.