sql >> Databáze >  >> RDS >> Mysql

Jak fungují statické vs singleton třídy (databáze)

Zvažte následující příklad, který používá vzor návrhu singleton pro přístup k instanci databázového objektu. (účelem toho je znovu a znovu použít stejné připojení v celé aplikaci)

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;
    }
}

Nyní, pokud musím použít třídu kdekoli v aplikaci, udělal bych to jednoduše takto.

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

volání Database::getInstance(); používá statickou metodu. v podstatě to dělá, že vám to omezuje přímou instanci objektu deklarováním konstruktoru jako soukromého a místo toho zkontroluje, zda je objekt již vytvořen. je-li true, vrátí již vytvořený objekt. jinak vytvořit nový a vrátit nově vytvořený objekt. to zajistí, že stejné databázové připojení bude znovu použito v celé aplikaci.




  1. Instalace pg gem; CHYBA:Nepodařilo se vytvořit nativní rozšíření drahokamů

  2. Vynechání milisekund v datu

  3. mysql více dotazů v jednom příkazu

  4. PŘIPOJTE SE ke třem stolům