Pdo

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Nel manuale nel capitolo relativo al PDO ad un certo punto dice:
"La classe PDO ha un metodo chiamato query(). Gli si passa un'istruzione Mysql e restituisce un oggetto di classe PDO"

$result=$connection->query("SHOW TABLES")

Come fa un metodo a restituire un oggetto di classe PDO? Istanzia la classe PDO?
 
Quando per esempio esegui il bootstrap per la connessione scrivi qualcosa come questo:
PHP:
$db = new PDO($col , 'username', 'password');
quindi stai istanziando.
 
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!
 

Discussioni simili