Мой совет - избегать глобальных изменений в коде - это опасно, трудно отследить и укусит вас.
Способ, которым я бы это сделал, - это получить функцию getDB (), которая может быть либо на уровне класса посредством внедрения конструктора, либо статической в общем классе.
Таким образом, код становится
class SomeClass {
protected $dbc;
public function __construct($db) {
$this->dbc = $db;
}
public function getDB() {
return $this->dbc;
}
function read_something() {
$db = getDB();
$db->query();
}
}
или используя общий разделяемый класс.
function read_something() {
$db = System::getDB();
$db->query();
}
Независимо от того, какой элегантный дизайн системы вы делаете, всегда есть несколько элементов, которые обязательно являются глобальными по объему (например, DB, Session, Config), и я предпочитаю сохранять их как статические методы в моей системе класс.
Лучше всего это сделать для каждого класса, требующего соединения через конструктор, я имею в виду самое надежное и изолированное.
Однако следует помнить, что использование общего общего класса для этого может повлиять на способность полностью изолировать объекты, использующие его, а также на возможность выполнения модульных тестов на этих объектах.