Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: класс для работы с PDO в виде Singletona
 
 автор: Bvz   (28.09.2013 в 20:47)   письмо автору
 
 

вроде бы работает вот такой код, дальше завяз

<?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_ERRMODEPDO::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

как лучше и где реализовать обертку для обработки запросов?

  Ответить  
 
 автор: psychomc   (29.09.2013 в 00:19)   письмо автору
 
   для: Bvz   (28.09.2013 в 20:47)
 

всё верно, потому что вы добавляете метод db_select классу db, а не PDO. и вообще, сиглетон тут неуместен. что если захотите работать например с двумя базами?

  Ответить  
 
 автор: Bvz   (29.09.2013 в 00:43)   письмо автору
 
   для: psychomc   (29.09.2013 в 00:19)
 

спасибо за подсказку, поставлю на заметку в будущем.
кстати нашел решение своего вопроса

  Ответить  
 
 автор: psychomc   (29.09.2013 в 00:58)   письмо автору
 
   для: Bvz   (29.09.2013 в 00:43)
 

не за что. просто имейте ввиду, что этот паттерн достаточно узкоспециализированный. то есть нужно сначала очень хорошо подумать насколько оправдан такой подход, и применять его только если нет совсем никаких сомнений, что будет не более одного экземпляра.

  Ответить  
 
 автор: Bvz   (29.09.2013 в 01:04)   письмо автору
 
   для: psychomc   (29.09.2013 в 00:58)
 

да, можно поразмышлять на тему использования Singleton в PDO

  Ответить  
 
 автор: Igorek   (29.09.2013 в 02:19)   письмо автору
 
   для: psychomc   (29.09.2013 в 00:19)
 

>сиглетон тут неуместен. что если захотите работать например с двумя базами?
что ж так сразу то? две и более БД далеко не самый распространенный случай

  Ответить  
 
 автор: psychomc   (29.09.2013 в 12:09)   письмо автору
 
   для: Igorek   (29.09.2013 в 02:19)
 

естественно, но периодически такое случается. класс такого рода должен быть максимально универсальным

  Ответить  
 
 автор: Bvz   (29.09.2013 в 15:11)   письмо автору
 
   для: Igorek   (29.09.2013 в 02:19)
 

в таком случае фабрику правильнее использовать?

  Ответить  
 
 автор: psychomc   (29.09.2013 в 15:19)   письмо автору
 
   для: Bvz   (29.09.2013 в 15:11)
 

да

  Ответить  
 
 автор: !   (02.10.2013 в 07:33)
 
   для: Bvz   (29.09.2013 в 15:11)
 

DIC правильнее использовать.

  Ответить  
 
 автор: Bvz   (02.10.2013 в 18:27)   письмо автору
 
   для: !   (02.10.2013 в 07:33)
 

DIC можно поподробнее?

  Ответить  
 
 автор: Igorek   (29.09.2013 в 02:18)   письмо автору
 
   для: Bvz   (28.09.2013 в 20:47)
 

>catch(PDOException $e) {
> echo "Ой!";
забавно)

  Ответить  
 
 автор: artem01   (30.09.2013 в 22:09)   письмо автору
 
   для: Bvz   (28.09.2013 в 20:47)
 

я не знаю как на счет фабрики пока не применял этот патерн но скажу точно что нужен отдельный класс для соединения с базой ,а ваш так скажем simple должен только принимать входящий ресурс соединения и еще очень важно пака не будет готова ваша обвертка не используйте ее иначе придется исправлять все ссылки в коде а так я только за такие решения ведь если что то устареет вы только правите вашу обвертку но опять же повторюсь очень важно продумать функционал прежде чем его использовать например если у вас есть метод getAllObj то он должен так и называться не зависимо от модификаций ну естественно и роль его тоже не должна меняться

  Ответить  
 
 автор: Bvz   (01.10.2013 в 08:48)   письмо автору
 
   для: artem01   (30.09.2013 в 22:09)
 

спасибо за мнение, с ссылками проблем нет, если грамотно прописать пути, то проблем нет где лежит файл и даже можно не париться об этом

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования