Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]DB class
Forum PHP.pl > Forum > Przedszkole
ShaggyAG
Witam,
W tutorialu, z którego ostatnio korzystałem była klasa do obsługi bazy danych
oto ona:
  1. class DB {
  2. private static $instance;
  3. private $MySQLi;
  4.  
  5. private function __construct(array $dbOptions){
  6.  
  7. $this->MySQLi = @ new mysqli( $dbOptions['db_host'],
  8. $dbOptions['db_user'],
  9. $dbOptions['db_pass'],
  10. $dbOptions['db_name'] );
  11.  
  12. if (mysqli_connect_errno()) {
  13. throw new Exception('Database error.');
  14. }
  15.  
  16. $this->MySQLi->set_charset("utf8");
  17. }
  18.  
  19. public static function init(array $dbOptions){
  20. if(self::$instance instanceof self){
  21. return false;
  22. }
  23.  
  24. self::$instance = new self($dbOptions);
  25. }
  26.  
  27. public static function getMySQLiObject(){
  28. return self::$instance->MySQLi;
  29. }
  30.  
  31. public static function query($q){
  32. return self::$instance->MySQLi->query($q);
  33. }
  34.  
  35. public static function esc($str){
  36. return self::$instance->MySQLi->real_escape_string(htmlspecialchars($str));
  37. }
  38. }

No i niestety nie do końca jestem w stanie ją zrozumieć.
Problematyczne jest dla mnie
  1. public static function init(array $dbOptions){
  2. if(self::$instance instanceof self){
  3. return false;
  4. }
  5.  
  6. self::$instance = new self($dbOptions);
  7. }

czemu to służy?
Czy w ogóle zasadne jest używanie takiej klasy?

Pozdrawiam
Pyton_000
To miał być chyba singleton ale coś nie wyszło.

init ma za zadanie zainicjować statyczną metodę obiektem własnej klasy. return false zapobiega ponownej inicjalizacji.

ShaggyAG
po co takie zabezpieczenie?
Przed czym to ma mnie chronić?
nospor
Poczytaj o SINGLETON a sie dowiesz.

Zadaniem singletonu jest zwracanie zawsze tylko jednej instancji obiektu danej klasy. Czemu to ma sluzyc? Bys nie na tworzył 50ciu obiektow bazy danych.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.