В идеале вы должны создать объект базы данных вне этих классов, а затем внедрить его через функцию конструктора или сеттера.
abstract class PageElement
{
protected $db;
function __construct($db)
{
$this->db = $db;
}
//...rest of the methods
}
class Toolbar extends PageElement
{
function __construct($construct, $db, $args = array())
{
parent::__construct($db);
$params = $this->construct_from_db($args, 'toolbars');
}
//other methods
}
Тогда вы можете создавать свои объекты:
$db = new Database(0);
$toolbar = new Toolbar($construct,$db,$args);
$section = new Section($construct,$db,$args);
Таким образом, все объекты будут совместно использовать один и тот же объект базы данных.
P.S .: Вместо того, чтобы создавать объект базы данных, используя new здесь, вы можете получить его с параметризованной фабрики.
$db = Factory::getDBO($param);