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