Il y a plusieurs façons de le faire. Les variables globales sont certainement un moyen et le plus méprisé aussi. Vous pouvez créer un Singleton et toutes les autres classes qui ont besoin d'accéder à la base de données appelleraient ce singleton.
final class Database {
private static $connection;
public static function getInstance() {
if(self::$connection == NULL) {
self::$connection = // init your database connection
}
return self::$connection;
}
}
Et utilisez cet objet de connexion à la base de données dans la classe qui en a besoin.
class Application {
public function displayVar() {
echo 'hello world';
}
public function getVar() {
$db = Database::getInstance();
$sql = foo;
$db->query($sql);
}
}
Tout cela est bien pour commencer et un grand pas au-delà de l'utilisation de variables globales, mais vous pouvez faire mieux avec Injection de dépendance . L'injection de dépendance est un concept simple selon lequel si une classe a des dépendances externes, telles que la connexion à la base de données dans votre exemple, vous les transmettez explicitement à la classe nécessiteuse dans son constructeur ou une méthode. Ainsi, le nouveau code ressemblerait à la solution de Jonathan. Un avantage majeur de l'utilisation de l'injection de dépendances réside dans les tests unitaires, où vous pouvez facilement remplacer cet objet de base de données réel par un objet fictif et le transmettre à quiconque en a besoin.
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);
}
}
Pour les petits projets, vous pouvez facilement le faire vous-même. Pour les grands projets, il existe différents DI frameworks disponibles pour PHP