Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Класс MySQL в класс DB2

#1 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0
0

Отправлено 07 Декабрь 2010 - 09:38

У меня все соединения и манипуляции с Базой данных работают через этот класс.Прикрепленный файл  class.Mysql.php   5,05К   Количество загрузок: 65 Он для СУБД MySQL

А можно ли его переписать для соединения с СУБД DB2, чтобы система, не меняя ничего, кроме самой СУБД, работала, просто поменяв файл класса с MySQL на новый, переписанный?

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Декабрь 2010 - 20:31

gaaarfild, почитай про абстракцию, она появилась в PHP5.

Абстракция — это придание объекту характеристик, которые отличают его от всех других объектов, четко определяя его концептуальные границы. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов, подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций, таким образом, данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня.
Такой подход является основой объектно-ориентированного программирования. Это позволяет работать с объектами, не вдаваясь в особенности их реализации. В каждом конкретном случае применяется тот или иной подход: инкапсуляция, полиморфизм или наследование. Например, при необходимости обратиться к скрытым данным объекта, следует воспользоваться инкапсуляцией, создав, так называемую, функцию доступа или свойство.

Взято с Wikipedia

А если в двух словах и без абстракции:
1) Имеем внешний статический класс-обертку, в который мы передаём данные для подключения и выбираем драйвер (тип СУБД)
2) Данный класс определяет тип СУБД, с которой мы собираемся работать, из параметра. Дальше подключает нужный класс для работы с СУБД, ну например mysql.class.php, db2.class.php и т.д.
3) Статический класс создаёт на основе класса, содержащегося в подключенном файле, объект для работы уже с определенной СУБД.
Этот объект уже проводит инициализацию (подключение к серверу БД, настройка кодировок, возможно выбор Базы данных).
4) Затем этот статический класс возвращает нам данный объект, с которым мы уже и работаем.

Но нужно учесть при такой иерархии, что нужно называть все методы для работы с БД одинаково для разных драйверов, иначе если мы вдруг захотим использовать MySQL вместо DB2, а в них определены разные методы - скрипт перестанет работать.
  • 0

#3 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 08 Декабрь 2010 - 21:50

Так это и понятно. И про абстракцию я знаю И ООП знаю очень хорошо. Я к тому, что позволяют ли встроенные функции PHP при такой структуре методов, создать другой класс для подключения к другой СУБД, не меняя саму систему. А только заменяя класс-драйвер.
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Декабрь 2010 - 09:41

gaaarfild, конечно можно, приведу пример той реализации, которую я предлагал.

Прикрепленные файлы

  • Прикрепленный файл  DBDriver.zip   1,93К   Количество загрузок: 62

  • 0

#5 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 09 Декабрь 2010 - 13:47

Ок. спасибо. попробую реализовать.
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Декабрь 2010 - 22:25

gaaarfild, если что, есть множество библиотек и классов, которые уже реализуют данный интерфейс.
  • 0

#7 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 10 Декабрь 2010 - 00:19

Да вот как раз занимаюсь их поиском. Как найду что нибудь интересное, обязательно выложу сюда.
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 10 Декабрь 2010 - 17:57

gaaarfild, вот есть варианты:
database.class.php, но в нем всё работа с разными СУБД реализована в одном классе.
basic database abstraction class that supports MySQL, Oracle, and MS Access

А если рассматривать серьезные:
1) ADODB
2) Pear:;DB и Pear::MDB
3) PDO
да и ещё множество есть, особенно если заглянуть в различные фреймворки
  • 0

#9 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 10 Декабрь 2010 - 23:09

Да в PDO делать надо))
В любом случае DB2 - это PDO в PHP.
Я думаю, все равно переписать надо будет вручную.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru