Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak działają klasy statyczne vs singletonowe (bazy danych)

Rozważmy następujący przykład, który używa wzorca projektowego singleton, aby uzyskać dostęp do instancji obiektu bazy danych.(Celem tego jest ponowne użycie tego samego połączenia w całej aplikacji)

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

teraz, jeśli muszę użyć klasy w dowolnym miejscu w aplikacji, po prostu zrobiłbym to w ten sposób.

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

wywołanie Database::getInstance(); używa metody statycznej. zasadniczo ogranicza to możliwość bezpośredniego tworzenia instancji obiektu poprzez zadeklarowanie konstruktora jako prywatnego, a zamiast tego sprawdza, czy obiekt jest już utworzony. jeśli true to zwróć już skonkretyzowany obiekt. w przeciwnym razie utwórz nowy i zwróć nowo utworzony obiekt. zapewnia to, że to samo połączenie z bazą danych jest ponownie wykorzystywane w całej aplikacji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja Laravel 5.4 — naruszenie ograniczenia integralności — kolumna nie może być pusta

  2. Co się dzieje z ciągiem pasującym do pola liczb całkowitych MySQL?

  3. Wybierz datę MySQL równą dzisiejszej

  4. unikaj sortowania według słowa kluczowego MYSQL IN

  5. PHP Cookie do utrzymania zalogowania użytkownika - czy to jest wystarczająco bezpieczne?