Location: PHPKode > scripts > SPL and Iterators > spl-and-iterators/users/dbfactory.cls.php
<?php
abstract class dbfactory {

    private static $instance;                   // Instance courante de la classe

    protected $_config;                         // Paramètres de configuration base de donnée.
    protected $query;                           // Ressource de query

    public $history = array();                  // Historique des requêtes
    public $query_id = 0;                       // Compteur de requêtes.


    // Initialise les variables de connections et active la connection à la base de donnée.
    // Constructeur protégé permettant de n'avoir qu'une unique instance de la classe grâce à la méthode singleton
     protected function __construct ($host=NULL, $user=NULL, $passwd=NULL, $name=NULL) {
        if (!is_array($this->default_cfg)) {
         throw new Exception('Vous devez remplir les paramètres de la configuration par defaut de votre base de donnée');
        }

        foreach ($this->default_cfg as $key=>$val ) {
             $this->_config[$key] = (isset($$key) ) ? $$key : $val;
        }

        unset ($this->default_cfg); // Enlève les paramètres par defaut pour éviter toute confusion possible.
        $this->connect ();
    }

    // usinage : permet d'instancier la classe correcte en fonction de la db choisie
    public static function factory ($type, $host=NULL, $user=NULL, $passwd=NULL, $name=NULL) {
        if (class_exists ($type)) {
            $className = $type;
            return new $className ($host, $user, $passwd, $name);
        } else {
            throw new Exception ('Pas d\'implémentation disponible pour ' . $type);
        }
    }

    // n'autorise qu'une seule instance de la classe
    public static function singleton () {
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }
    return self::$instance;
    }

    // on avertit le développeur qu'il n'a pas le droit de cloner l'objet instancié
    public function __clone() {
       trigger_error('Le clônage n\'est pas autorisé.', E_USER_ERROR);
    }

    // méthodes abstraites
    abstract protected function connect();
    abstract public function __destruct();
    abstract public function query($sql, $desc=NULL);
    abstract public function fetch_assoc($query=NULL);
    abstract public function insert_id ();
    /*
    abstract public function num_rows($query=NULL);
    abstract public function fetch_row($query=NULL);
    abstract public function fetch_array($query=NULL);
    abstract public function free();
    */
}
?>
Return current item: SPL and Iterators