Есть класс с методом подключения к бд. PHP: <?php class Db { public static function getConnection() { // Получаем параметры подключения из файла $paramsPath = ROOT . '/config/db_params.php'; $params = include($paramsPath); // Устанавливаем соединение $dsn = "mysql:host={$params['host']};dbname={$params['dbname']}"; $db = new PDO($dsn, $params['user'], $params['password']); // Задаем кодировку $db->exec("set names utf8"); return $db; } } // и файл db_params <?php return array( 'host' => 'localhost', 'dbname' => 'db', 'user' => 'root', 'password' => '', ); как из этого сделать singleton? --- Добавлено --- я сделал так: PHP: <?php class Db { private static $_instance; public static function getInstance() { if(!self::$_instance) { self::$_instance = new self(); } return self::$_instance; } public static function getConnection() { // Получаем параметры подключения из файла $paramsPath = ROOT . '/config/db_params.php'; $params = include($paramsPath); // Устанавливаем соединение $dsn = "mysql:host={$params['host']};dbname={$params['dbname']}"; $db = new PDO($dsn, $params['user'], $params['password']); // Задаем кодировку $db->exec("set names utf8"); return $db; } } а в моделе уже делаю: PHP: // Возвращает список новостей public static function getNewsList() { $db2 = Db::getInstance(); $db = $db2->getConnection(); // Соединение с БД //$db = Db::getConnection(); // Получение и возврат результатов $result = $db->query('SELECT * FROM news ORDER BY id DESC'); $productsList = array(); $i = 0; while ($row = $result->fetch()) { $productsList[$i]['id'] = $row['id']; $productsList[$i]['title'] = $row['title']; $productsList[$i]['text'] = $row['text']; $i++; } return $productsList; } вроде работает. это правильно?
по идее singlton должен быть с конструктором.. что бы в момент создания класса проверялось есть ли такой экземпляр или нет..
а метод getConnection должен быть приватным что бы никто его не вызвал... а то помощью него можно нафигачить подключений..
вот как то так наверно... PHP: class Db { private static $db = null; static public function getInstance() { if(is_null(self::$db)){ // Получаем параметры подключения из файла $paramsPath = ROOT . '/config/db_params.php'; $params = include($paramsPath); // Устанавливаем соединение $dsn = "mysql:host={$params['host']};dbname={$params['dbname']}"; self::$db = new PDO($dsn, $params['user'], $params['password']); // Задаем кодировку self::$db->exec("set names utf8"); } return self::$db; } private function __construct() {} protected function __clone() {} }