jak masz takie same metody publiczne czy chronione u rodzica to nie musisz ich nadpisywać przy potomkach - dlatego potomek tutaj DB_getUser nie musiał mieć definicji __construct()...
jeśli chcesz mieć jeden uchwyt do a w zasadzie tworząc nowe instancje obiektu to daleko od singleton'a - jeśli tak chciałbyś zrobić to klasa bazy po prostu obsługuje bazę i instancje tej klasy przekazujesz innym klasom gdzie z db zwracasz uchwyt - oczywiście w modelu singleton klasę tworzy się tak by zawsze był zwracany stary obiekt a nie nowy [chyba, że nie istnieje...] - obiekt taki najczęściej jest zapamiętany w zmiennej statycznej...
ale na to co Ty zrobiłeś zamiast singleton'a to zrób deczko inny konstruktor i inaczej przechowuj zmienne i uchwyt do bazy - w zmiennych statycznych - jeśli one są ustawione to w konstruktorze nic nie rób... w metodach uchwyt do bazy odwołuj się do zmiennej statycznej - oczywiście zdefiniuj je u najwyższego rodzica by potomkowie mieli także dostęp do tych zmiennych statycznych...
czyli zamiast:
class DB
{
protected $connection;
protected $_printExceptions;
public function __construct($db, $printExceptions=FALSE)
{
$this->_printExceptions = $printExceptions;
try
{
$this->connection = new PDO
('mysql:host='.$db['host'].'; port='.$db['port'].'; dbname='.$db['name'], $db['user'], $db['pass'], array(PDO
::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
$this->_handleException($e, 'Database class exception while connecting to the database:');
}
}
}
możesz zrobić:
class DB
{
protected
static $_printExceptions;
public function __construct($db, $printExceptions=FALSE)
{
if(!isset(self::$connection)){ self::$_printExceptions = $printExceptions;
try
{
self::$connection = new PDO
('mysql:host='.$db['host'].'; port='.$db['port'].'; dbname='.$db['name'], $db['user'], $db['pass'], array(PDO
::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
$this->_handleException($e, 'Database class exception while connecting to the database:');
}
}
}
}
no i oczywiście uchwyt do bazy we wszystkich klasach także potomnych masz pod
self::$connection