<?php abstract class AbstractSingleton { protected function __construct() { } $calledClassName = get_called_className(); $aoInstance[$calledClassName] = new $calledClassName(); } return $aoInstance[$calledClassName]; } final private function __clone() { } } function get_called_className() { if (!function_exists('get_called_class')) { $pattern = '/([a-zA-Z0-9_]+)::'.$bt[1]['function'].'/'; return $matches[0]; } return false; } } ?>
Teraz po tej klasie dziedziczę i tworzę obiekt odpowiezialny za łączenie z bazą danych:
<?php class DatabaseConnection extends AbstractSingleton { protected $connection; protected function __construct() {} public function connect($database) { $database['hostname'], $database['username'], $database['password']); if ($this->connection === false) throw (new Exception('Błąd połączenia z bazą danych')); } } ?>
Problem w tym, że kiedy później chcę korzystać z tego obiektu (w taki sposób)
<?php DatabaseConnection::instance()->connect($config_array); ?>
dostaję błąd w autoloaderze:
Fatal error: require_once() [function.require]: Failed opening required 'class/DatabaseConnection::instance.class.php'
nie mam pomysłu jak to zrobić dobrze, czy połączenie z bazą danych musi nastąpić w konstruktorze? Czy do konstruktora mogę przekazać jakieś parametry? Jak się potem tym obiektem posługiwać?