Existem algumas maneiras de fazer isso. As variáveis globais são certamente uma maneira e as mais desprezadas também. Você pode criar um Singleton e todas as outras classes que precisam de acesso ao banco de dados chamariam esse singleton.
final class Database {
private static $connection;
public static function getInstance() {
if(self::$connection == NULL) {
self::$connection = // init your database connection
}
return self::$connection;
}
}
E use este objeto de conexão de banco de dados em qualquer classe que precisar.
class Application {
public function displayVar() {
echo 'hello world';
}
public function getVar() {
$db = Database::getInstance();
$sql = foo;
$db->query($sql);
}
}
Isso é bom para começar e é um grande passo além do uso de variáveis globais, mas você pode fazer melhor com Injeção de Dependência . Injeção de Dependência é um conceito simples de que se uma classe tiver quaisquer dependências externas, como a conexão de banco de dados em seu exemplo, você as passará explicitamente para a classe carente em seu construtor ou método. Assim, o novo código se pareceria com a solução de Jonathan. Uma grande vantagem de usar injeção de dependência está no teste de unidade, onde você pode substituir facilmente esse objeto de banco de dados real por um objeto simulado e passá-lo para quem precisar.
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 projetos menores, você pode facilmente fazer isso sozinho. Para grandes projetos, existem vários DI frameworks disponíveis para PHP