sql >> Database >  >> RDS >> Mysql

Hoe statische versus singleton-klassen werken (databases)

Beschouw het volgende voorbeeld dat het singleton-ontwerppatroon gebruikt om toegang te krijgen tot de instantie van het databaseobject. (het doel hiervan is om dezelfde verbinding keer op keer opnieuw te gebruiken in de toepassing)

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

als ik de klasse nu ergens in de applicatie moet gebruiken, zou ik het eenvoudig zo doen.

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

de aanroep naar Database::getInstance(); maakt gebruik van statische methode. wat dit in feite doet, is dat het je beperkt in het direct instantiëren van het object door de constructor als privé te declareren, en in plaats daarvan controleert het of het object al is geïnstantieerd. indien waar, retourneer dan het reeds geïnstantieerde object. maak anders een nieuw en retourneer het nieuw gemaakte object. dit zorgt ervoor dat dezelfde databaseverbinding door de hele applicatie wordt hergebruikt.




  1. Een Docker Swarm-cluster maken op Azure Container Service

  2. MySQL-fout bij het afkappen van de tabel

  3. Database voor zoeken in volledige tekst en 200 miljoen records

  4. Importeer SQL-dump in PostgreSQL-database