Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonctionnement des classes statiques et singleton (bases de données)

Considérez l'exemple suivant qui utilise le modèle de conception singleton pour accéder à l'instance de l'objet de base de données (le but est de réutiliser la même connexion encore et encore dans l'application)

class Database {

    protected static $_dbh;
    const HOST = 'localhost';
    const DATABASE = 'dbname';
    const USERNAME = 'username';
    const PASSWORD = 'password';

    //declare the constructor as private to avoid direct instantiation.   
    private function __construct() { }

    //access the database object through the getInstance method.
    public static function getInstance() {
        if(!isset($_dbh)) {
            #Connection String.
            self::$_dbh = new PDO('mysql:host='.self::HOST.';dbname='.self::DATABASE,self::USERNAME,self::PASSWORD);
            self::$_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        return self::$_dbh;
    }
}

maintenant, si je dois utiliser la classe n'importe où dans l'application, je le ferais simplement comme ça.

require_once('database.php');
$dbh = Database::getInstance();
$sth = $dbh->query('SELECT * FROM sometable');
$result = $sth->fetchAll(PDO::FETCH_ASSOC);

l'appel à Database::getInstance(); utilise la méthode statique. ce que cela fait essentiellement, c'est qu'il vous empêche d'instancier directement l'objet en déclarant le constructeur comme privé, et à la place, il vérifie si l'objet est déjà instancié. si vrai, retourne l'objet déjà instancié. sinon créer un nouveau et renvoyer l'objet nouvellement créé. cela garantit que la même connexion à la base de données est réutilisée dans l'ensemble de l'application.