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

Vzor připojení k databázi PHP singleton

Pomocí singletons v PHP je považován za špatný postup. Z mé zkušenosti jsou nejproblematičtějším problémem s nimi testy jednotek. Je těžké zajistit, aby dva testy byly nezávislé při testování singletonů.

Odpovědnost za omezení „by měla existovat pouze jedna instance“ bych delegoval na kód, který vytváří objekt Db.

Také to pro mě vypadá, že existuje nedorozumění v tom, jak Singletony fungují v PHP na rozdíl od jiných jazyků:Pokud máte například 10 000 souběžných požadavků, pak každý požadavek běží v samostatném procesu PHP nebo vlákně, což znamená, že všechny budou mít svůj vlastní instance "singleton", neexistuje žádné sdílení tohoto objektu pro více než jeden požadavek (při spuštění PHP v běžných scénářích webového backendu)

V PHP neexistuje žádné "sdružování připojení", ale můžete použít mysqli trvalá připojení pro mysql. Toho lze dosáhnout předáním p: před název hostitele při vytváření mysqli. Zde by to mohlo pomoci, ale zacházejte s tím opatrně (to znamená, že si nejprve přečtěte dokumentaci )

Nicméně jen pro teorii, singleton v PHP si musí být vědom skutečnosti, že někdo může použít clone . To znamená, že ve vašem případě by to bylo možné:

$db = DB::getInstance();
$db2 = clone $db; 

Abyste tomu zabránili, můžete implementovat __clone() metoda, jako je tato:

public function __clone() {
    throw new Exception("Can't clone a singleton");
}



  1. Kód chyby 1111. Neplatné použití skupinové funkce

  2. Najděte mezery v datech pomocí mysql

  3. jak používat kanonické funkce v Entity Framework a Mysql

  4. Oracle SQL plus jak ukončit příkaz v souboru SQL?