Помощник
|
Объектная ориентация |
Arks
|
Сообщение
#1
|
||
|
|
||
|
|||
Apay |
24.4.2010, 23:08;
Ответить: Apay
Сообщение
#2
|
|
любой более-менее серьезный проект всегда начинается с разработки архитектуры (классов, таблиц бд, интерфейса и пр.), тут вопросов быть не может. а классы нужны хотя бы для реализации уровней абстракции. покажу на примере бд. если всю работу с бд выделить в отдельный класс, а везде импользоывать только стандартизированные вызовы этого класса, то в будущем путем замены этого класса можно легко перейти,например, от mysql к sqlite или postgresql. точно так же можно сделать чтобы за интерфейс отвечали классы, тогда смена интерфейса будет безболезненной. другое преимущество классов - визуальная струтуризация алгоритмов и упрощение командной разработки.
з.ы. прпиведенный пример содерхит три недостатка: 1) при неудаче sql запросов нет никакой обработки ошибок 2) явная ошибка: query вызывается как метод класса а не как метод объекта. в данном случае все сработает, но это системная ошибка 3) в случае использования классов желательно до минимума сократить прямое обращени к полям, лучше все это (инициализацию) завернуть в один метод но в целом подход верен |
|
|
Arks
|
Сообщение
#3
|
|
2) явная ошибка: query вызывается как метод класса а не как метод объекта. в данном случае все сработает, но это системная ошибка Потому что мы не знаем(условно) какой именно объект инициализирует программист. Вы видите другой выход из ситуации?
|
|
|
Apay |
25.4.2010, 8:44;
Ответить: Apay
Сообщение
#4
|
|
другой выход:
[PHP]class DB { function __construct(){ ... } function& getDB(){ static $instance; if( !isset($instance) ) $instance = new DB(); return $instance; } function query( ... ){ ... } ... } class user{ ... function register(){ $db =& DB::getDB(); $db->query( ... ); } } [/PHP] |
|
|
r3ntg3n |
25.4.2010, 12:01;
Ответить: r3ntg3n
Сообщение
#5
|
|
Arks, зачем писать велосипед с лице класса base?
в php давно есть такой веселый объект как mysqli. и он уже содержит в себе и метод query(), который ты написал, и кучу других интересных штук для работы с мускулом. |
|
|
Apay |
25.4.2010, 12:15;
Ответить: Apay
Сообщение
#6
|
|
Arks, зачем писать велосипед с лице класса base? в php давно есть такой веселый объект как mysqli. и он уже содержит в себе и метод query(), который ты написал, и кучу других интересных штук для работы с мускулом. открою маленький секрет: database это не только mysql, и еще:в будущем путем замены этого класса можно легко перейти,например, от mysql к sqlite или postgresql
|
|
|
Arks
|
Сообщение
#7
|
|
другой выход: Это не другой выход, это мы смотрим была ли инициализирована переменная instance и если нет то инициализируем новый объект класса. Даже с учетом ссылки что в этом выходе другого? Разьве классовые методы не были придуманы чтобы заменить объектные там где это удобно? |
|
|
Apay |
25.4.2010, 16:30;
Ответить: Apay
Сообщение
#8
|
|
|
Это не другой выход, это мы смотрим была ли инициализирована переменная instance и если нет то инициализируем новый объект класса. Даже с учетом ссылки что в этом выходе другого? Разьве классовые методы не были придуманы чтобы заменить объектные там где это удобно? не всегда то что удобно - правильно, как говорится в одной поговорке: "иногда удобно и в штаны наложить..." :) а другое - то что объект полностью отвечает за работу с определенной базой. 1) зачем в вашем случае создавать экземпляр класса base? можно же инициализацию тоже сделать класс-методом. и зачем в этом случае вообще нужен класс base? в чем его смысл? логин-пароль хранить? тут классы не нужны. 2) связь с базой устанавливается гарантированно только 1 раз, и нет такого, что кто-то из разработчиков забыл проинициализировать или кждый в своем модуле проинициализировал, таким образом исчерпав лимит соединений. 3) немного подправив код (я привел только самый примитив) мы можем создать подключения ко множеству баз одновременно и работать с ними, а в вашем случае запрос адресуется только к одной базе
|
|
|
||
|
Текстовая версия | Сейчас: 24.4.2024, 14:20 |