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

Prawidłowo używasz klas w innych klasach w php?

Jest na to kilka sposobów. Zmienne globalne są z pewnością jednym ze sposobów i również najbardziej pogardzanym. Możesz utworzyć Singleton i wszystkie inne klasy, które potrzebują dostępu do bazy danych, odwołują się do tego pojedynczego.

final class Database {
    private static $connection;

    public static function getInstance() {
        if(self::$connection == NULL) {
            self::$connection = // init your database connection
        }
        return self::$connection;
    }
}

I użyj tego obiektu połączenia z bazą danych w dowolnej klasie, której tego potrzebuje.

class Application {
    public function displayVar() {
        echo 'hello world';
    }
    public function getVar() {
        $db = Database::getInstance();
        $sql = foo;
        $db->query($sql);
    }
}

To wszystko jest dobre na początek i świetny krok poza używanie zmiennych globalnych, ale możesz zrobić lepiej dzięki Wstrzykiwanie zależności . Wstrzykiwanie zależności to prosta koncepcja, w której jeśli klasa ma jakiekolwiek zależności zewnętrzne, takie jak połączenie z bazą danych w twoim przykładzie, jawnie przekazujesz je do potrzebnej klasy w jej konstruktorze lub metodzie. Więc nowy kod będzie wyglądał jak rozwiązanie Jonathana. Główną zaletą korzystania z wstrzykiwania zależności jest testowanie jednostkowe, w którym można łatwo zastąpić ten rzeczywisty obiekt bazy danych obiektem pozorowanym i przekazać go każdemu, kto tego potrzebuje.

class Application {
    private $db;

    public function __construct(Database $db) {
        $this->db = $db;
    }

    public function displayVar() {
        echo 'hello world';
    }

    public function getVar() {
        $sql = foo;
        $this->db->query($sql);
    }
}

W przypadku mniejszych projektów możesz łatwo zrobić to sam. W przypadku dużych projektów dostępne są różne frameworki DI dostępne dla PHP



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA:relacja wiele do wielu — JsonMappingException:Nieskończona rekurencja

  2. Plik wsadowy dla mysqldump do tworzenia kopii zapasowych każdej bazy danych w osobnym pliku

  3. Konwersja MyISAM do InnoDB. Korzystny? Konsekwencje?

  4. Błąd połączenia php MySql

  5. Jak mogę pominąć dane wyjściowe nagłówka kolumny dla pojedynczej instrukcji SQL?