Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП и либы для баз данных, пишу, но есть проблема ) 
:(
    Опции темы
mark2011
Дата 11.9.2011, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 28.6.2011

Репутация: нет
Всего: 2



Здравствуйте!

Пишу библиотеки доступа для баз данных, используя пространства имён и все возможности ООП. Имеем следующую структуру классов:

Database (абстрактный класс с общими методами для всех наследуемых классов)
MySQL (потомок Database)
MySQL_StoredProcs (потомок MySQL)

Вот код конструктора класса MySQL:

Код

public function __construct($host, $user, $password, $dbname)
    {    
        parent::__construct();
        $this->setHost($host);
        $this->setUser($user);
        $this->setPassword($password);
        $this->setDbName($dbname);
        
        
        $pers = $this->getPersistent();
        if ($pers)
        {
            $function = "mysql_pconnect";
        }
        else
        {
            $function = "mysql_connect";
        }
        
        if (!function_exists($function))
        {
            return false;
        }    
        
        $test = $function($host, $user, $password);
        if (!$test)
        {
            return false;
        }
        
        else
        {
            $this->_ConnID    =    $test;
            $this->select_db();
            $this->query('SET @@AUTOCOMMIT = false');
        }
    }


Как видим, здесь используются 4 переменные, и без них, видимо, никак. Тут всё хорошо. Теперь в классе MySQL_StoredProcs пытаюсь сделать 

Код

parent::__construct();

который в таком виде, естественно, не проходит. Говорит что не указаны те самые 4 переменные. Хорошо.... идём обратно в класс Database и видим:

Код

/**
     * Host
     * @var string
     * @access protected
    */ 
    protected $_host;
    
    /**
     * User
     * @var string
     * @access protected
    */
    protected $_user;
    
    /**
     * Password
     * @var string
     * @access protected
    */
    protected $_password;
    
    /**
     * Database name
     * @var string
     * @access protected
    */
    protected $_dbName;


В точности их указываем в методе parent::__construct() класса MySQL_StoredProcs и получаем

Код

Warning: mysql_connect(): Access denied for user ''@'localhost' (using password: NO) in D:\WebSites
\main\libs\Database\mysql.php on line 92 Warning: mysql_query(): Access denied for user ''@'localhost'
 (using password: NO) in D:\WebSites\main\libs\Database\mysql.php on line 123 Warning: mysql_query():
A link to the server could not be established in D:\WebSites\main\libs\Database\mysql.php on line 123
Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in D:\WebSites
\main\libs\Database\mysql.php on line 123 Warning: mysql_query(): A link to the server could not be
established in D:\WebSites\main\libs\Database\mysql.php on line 123 


Как бы тоже логично, потому что вне классов у меня эти переменные нигде не указаны. Действительно, откуда же он их возьмёт? Но как быть? Конструктор Database - без параметров. Конструктор MySQL - 4 параметра, но в этом конструкторе я вызываю parent::__construct() и всё нормально. Конструктор MySQL_StoredProcs без параметров, НО у родителя 4 параметра, а где их определить - непонятно. Или MySQL_StoredProcs делать тоже с 4 параметрами? Но для чего тогда наследование вообще? Что-то непонятно в этой части...
PM WWW ICQ Skype   Вверх
s0lman
Дата 16.9.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: нет
Всего: 29



Чтоб передать параметры, их надо где-то взять, например, считать из конфига или захардкодить smile 
Что-то подобное есть?


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
vfz4z
Дата 22.12.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.6.2010

Репутация: нет
Всего: нет



Ага. Рекомендую использовать пер-ю в конфиге, типа 

Код

return array(
      'connectionString' => 'mysql:host=mysql.nt;dbname=errd',      
      'username' => 'root',
      'password' => 'nt13579',
      'charset' => 'utf8',
      'tablePrefix' => 'errd_',

    );


и в родительском классе инициализировать подключение....

Добавлено через 1 минуту и 1 секунду
код из yii. А вообще я не сторонник изобретения велосипедов. Готовых orm оч. много... На край просто можно посмотреть как сделано
PM MAIL   Вверх
krundetz
Дата 22.12.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



может для MySQL_StoredProcs сделать такой конструктор?
Код

public function __construct($host, $user, $password, $dbname) {
    parent::__construct($host, $user, $password, $dbname);
}



--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Fortop
Дата 26.2.2012, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Мне кажется тут ошибка проектирования

Что за класс MySQL_StoredProcs?

И почему он потомок от MySQL

Логичнее было бы иметь что-то вида

Код

class MySQL_StoredProcs {
    protected $_db = null;

    public function __construct(MySQL $db) {
        $this->_db = $db;
    }

    public function query($sql) {
        return $this->_db->query($sql);
    }
}



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
krundetz
Дата 27.2.2012, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Fortop, 2 месяца теме.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0747 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.