Hay un par de formas de hacerlo. Las variables globales son ciertamente una forma y también la más despreciada. Puede crear un Singleton y todas las demás clases que necesitan acceso a la base de datos recurrirían a este singleton.
final class Database {
private static $connection;
public static function getInstance() {
if(self::$connection == NULL) {
self::$connection = // init your database connection
}
return self::$connection;
}
}
Y use este objeto de conexión de base de datos en cualquier clase que lo necesite.
class Application {
public function displayVar() {
echo 'hello world';
}
public function getVar() {
$db = Database::getInstance();
$sql = foo;
$db->query($sql);
}
}
Todo esto está bien para empezar y es un gran paso más allá del uso de variables globales, pero puede hacerlo mejor con Inyección de dependencia . La inyección de dependencia es un concepto simple que si una clase tiene dependencias externas, como la conexión de la base de datos en su ejemplo, las pasa explícitamente a la clase necesitada en su constructor o un método. Entonces, el nuevo código se parecería a la solución de Jonathan. Una de las principales ventajas de usar la inyección de dependencia es la prueba unitaria, donde puede reemplazar fácilmente este objeto de base de datos real con un objeto simulado y pasárselo a quien lo necesite.
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);
}
}
Para proyectos más pequeños, puede hacerlo fácilmente usted mismo. Para proyectos grandes, hay varios marcos DI disponibles para PHP