Porca la miseria ragazzi, per capire questa classe Pdo e come mai foreach() riusciva ad "attraversarela classe" ho dovuto studiarmi anche il pattern iterator :-(
Qualsiasi classe che implementa l'interfaccia Traversible può essere “attraversata” dal costrutto foreach(). Tuttavia l'interfaccia Traversible è un'interfaccia vuota, al suo posto vanno usate altre due interfacce (Iterator e IteratorAggregate) che a loro volta implementano Traversible.
Iterator presenta alcuni metodi non implementati che vanno definiti nella classe che implementa l'interfaccia. Ad esempio:
Codice:
Class QuadratoNumeri implements Iterator{
private $inizio;
private $fine;
private $cur;
public function __construct($inizio, $fine)
{
$this->inizio=$inizio;
$fine->=$fine;
}
public function rewind(){
$this->cur=$inizio;
}
public function key{
return $this->cur;
{
public function current(){
return pow($this->cur,2);
}
public function next{
$this->cur++;
}
public function valid(){
return $this->cur <= $this->fine;
}
}
$obj=newQuadratoNumeri(3,7);
foreach($obj as $key=>$value){
print “Il quadrato di $key è $value\n”;
}
Siccome bisogna separare l'implementazione della classe dal suo iteratore, si fa uso dell'intefaccia IteratorAggregate che contiene un metodo pubblico getIterator. Il metodo restituisce un oggetto iteratore che gestisce l'iterazione per la classe corrente.
Codice:
Class QuadratoNumeri implements IteratorAggregate{
private $inizio;
private $fine;
public function __construct($inizio,$fine)
{
$this->inizio=$inizio;
$this->fine=$fine;
}
public function getIterator()
{
return new QuadratoNumeriIteratore($this);
}
…......
….....
}
Ovviamente questo meccanismo va applicato anche alla Classe Pdo.
Ho comprato il manuale Php 6 Guida per lo sviluppatore (io che pensavo il db fosse un panino da mangiare) e quando ho iniziato a studiarlo mi stavo buttando dalla finestra
Mi sono trovato di fronte a concetti mai visti prima (classe, oggetto, ereditarietà, polimorfismo,ecc. ecc). Poi dopo molto tempo e ore di studio unite a smadonnamenti vari sono riuscito a "carburare" ma quanta fatica!!!!
E se penso che ora mi aspetta il capitolo sull'ORM......
Ps: Eliox ma tu sei Claudio Garau? Se si volevo ringraziarti pubblicamente. Senza la tua guida sul Pdo non credo ce l'avrei fatta!