Hellihello Tim,
Ja. Ich finde das auch nicht sonderlich schlimm, ein immer wieder verwendetes Muster des Zugriffs zu vereinheitlichen und (wie bei PHP, Python, Ruby *) dafür syntaktischen Zucker anzubieten, um dieses mehr in die Sprache einzubinden. Je weniger jedes Objekt, das auch nur irgendeine Sammlung oder gar einen nicht endenden Strom von Daten darstellt, seine eigene Zugriffsmethoden definieren muss, desto weniger Sonderfälle muss man sich merken.
Fein, dass Du das sagst. Nun dachte ich, es würde nicht nur einen DirectoryIterator und SimpleXMLIterator sondern bestimmt auch einen MySQLResultIterator, fand ich aber nicht, fand nur http://www.santosj.name/programming/php-related/patterns-for-php-iterator/, was ich etwas angepasst habe, weil is_result() nicht auf meine mysqli-resources anzuspringen scheint, und die Anfragen in mysql statt mysqli formuliert warten. Bei beiden Implementierungen bekommt ich aber beim Foreachen als ersten Wert ein bool(true) und erst dann die assoziativen Arrays mit den DB-Eingträgen. Woher aber kommt das "true"?
// 080826 - quelle: http://www.santosj.name/programming/php-related/patterns-for-php-iterator/
//
class Robs_MysqlIterator implements Iterator
{
protected $row = null;
protected $query = null;
public function __construct($resource)
{
$this->query = $resource;
}
public function key() { } // Not Implemented
public function current()
{
if($this->row != null) {
return $this->row;
}
}
public function next()
{
$this->row = mysqli_fetch_assoc($this->query);
return $this->row;
}
public function rewind()
{
$this->row = mysqli_data_seek($this->query, 0);
return $this->row;
}
public function valid()
{
if($this->row == false) {
return false;
}
return true;
}
}
Dank und Gruß,
Robert aka