|
|
|
| вроде бы работает вот такой код, дальше завяз
<?php
class db {
protected static $_instance = NULL;
private function __construct() {}
private function __clone() {}
private function __wakeup() {}
public static function getInstance() {
if (self::$_instance === NULL) {
$config = db_config::getInstance();
try {
self::$_instance = new PDO ("mysql:host=$config->db_host;dbname=$config->db_base",
$config->db_user,
$config->db_password,
array(PDO::ATTR_PERSISTENT => true,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $config->encoding"));
self::$_instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Ой!";
file_put_contents(__DIR__."/log/db_error.log", $e->getMessage()."\r\n", FILE_APPEND | LOCK_EX);
}
return self::$_instance;
}
}
}
|
но если в нем сделать еще какие-нибудь методы, то выскакивает ошибка, типа
Call to undefined method PDO::db_select() in
как лучше и где реализовать обертку для обработки запросов? | |
|
|
|
|
|
|
|
для: Bvz
(28.09.2013 в 20:47)
| | всё верно, потому что вы добавляете метод db_select классу db, а не PDO. и вообще, сиглетон тут неуместен. что если захотите работать например с двумя базами? | |
|
|
|
|
|
|
|
для: psychomc
(29.09.2013 в 00:19)
| | спасибо за подсказку, поставлю на заметку в будущем.
кстати нашел решение своего вопроса | |
|
|
|
|
|
|
|
для: Bvz
(29.09.2013 в 00:43)
| | не за что. просто имейте ввиду, что этот паттерн достаточно узкоспециализированный. то есть нужно сначала очень хорошо подумать насколько оправдан такой подход, и применять его только если нет совсем никаких сомнений, что будет не более одного экземпляра. | |
|
|
|
|
|
|
|
для: psychomc
(29.09.2013 в 00:58)
| | да, можно поразмышлять на тему использования Singleton в PDO | |
|
|
|
|
|
|
|
для: psychomc
(29.09.2013 в 00:19)
| | >сиглетон тут неуместен. что если захотите работать например с двумя базами?
что ж так сразу то? две и более БД далеко не самый распространенный случай | |
|
|
|
|
|
|
|
для: Igorek
(29.09.2013 в 02:19)
| | естественно, но периодически такое случается. класс такого рода должен быть максимально универсальным | |
|
|
|
|
|
|
|
для: Igorek
(29.09.2013 в 02:19)
| | в таком случае фабрику правильнее использовать? | |
|
|
|
|
|
|
|
для: Bvz
(29.09.2013 в 15:11)
| | да | |
|
|
|
|
автор: ! (02.10.2013 в 07:33) |
|
|
для: Bvz
(29.09.2013 в 15:11)
| | DIC правильнее использовать. | |
|
|
|
|
|
|
|
для: !
(02.10.2013 в 07:33)
| | DIC можно поподробнее? | |
|
|
|
|
|
|
|
для: Bvz
(28.09.2013 в 20:47)
| | >catch(PDOException $e) {
> echo "Ой!";
забавно) | |
|
|
|
|
|
|
|
для: Bvz
(28.09.2013 в 20:47)
| | я не знаю как на счет фабрики пока не применял этот патерн но скажу точно что нужен отдельный класс для соединения с базой ,а ваш так скажем simple должен только принимать входящий ресурс соединения и еще очень важно пака не будет готова ваша обвертка не используйте ее иначе придется исправлять все ссылки в коде а так я только за такие решения ведь если что то устареет вы только правите вашу обвертку но опять же повторюсь очень важно продумать функционал прежде чем его использовать например если у вас есть метод getAllObj то он должен так и называться не зависимо от модификаций ну естественно и роль его тоже не должна меняться | |
|
|
|
|
|
|
|
для: artem01
(30.09.2013 в 22:09)
| | спасибо за мнение, с ссылками проблем нет, если грамотно прописать пути, то проблем нет где лежит файл и даже можно не париться об этом | |
|
|
|