| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > ООП |
| Автор: Fubu_By 27.3.2008, 14:47 |
| помогите разобраться как делать есть допустим у меня клас для работы с БД и ещё один класс для работы с сесиями допустим, как мне сделать чтобы третий класс наследовал методы обоих классов? один через другой типо третий наследует второй, а второй первый не подходит. |
| Автор: awers 27.3.2008, 14:56 |
| ну насколько я знаю множественное наследование в пхп нету. может стоит как то по другому организовать? я уверен есть выход. |
| Автор: Fubu_By 27.3.2008, 15:57 | ||||||
пример не надуманный я считываю данные из БД и закидываю в сесию, методы для БД беру из одного класса а методы для работы с сессией с другого... если не сложно сложно напиши пример один при помощи интерфейсов а второй при помощи __call а тот пример что ты дал ссылку реально извращённый |
| Автор: solenko 27.3.2008, 16:10 | ||
Ну так это и нормально. Сессия и база разные сущности -- им просто нечего делать в одном классе. Честно говоря, мне тяжело представить себе класс котрый наследует функционал работы с сессиям и с базой. Может быть опишеш задачи, которые дложен решать этот третий класс, а, исходя из этого все вместе подумаем как лучшу сделать? |
| Автор: be_nt_all 27.3.2008, 16:26 | ||||||||
И что нам мешает просто использовать объекты класса БазаДанных и класса Сессия?
Можно сделать проще, но мало мальски корректная реализация множественного наследования намного проще не будет. См. метод _findByMethod (к-й и вызывается из _call) в базовом классе от dark-demon-а. Там использована рекурсия, в результате которой классы "делегатов" будут иметь доступ к методам друг-друга (аналогично для свойств - _findByProp и метод __get). Можно заменить весь этот рекурсивный обход на что-то вроде
где obj - экземпляр класса2, но так мы не будем видеть твой объект из obj, если ты об этом специально не позаботишься. Интерфейсы ничего принципиального к этой схеме не добавят - это просто элементы строгой типизации, без которых в слабо-типизированном ПХП вполне можно обойтись. А вообще почитай главы об ОО-модели PHP5 у Гутманса (PHP5 - проф. прогр-ие) или Котерова (PHP5 в подлиннике) (ну или ещё где нибудь - информации хватает). В общем - множественное наследование мощный, но сложный механизм, и прежде чем его использовать (даже в С++ где оно - часть базового языка), стоит подумать, какие реальные преимущества оно даёт для решаемой задачи. Добавлено через 3 минуты и 38 секунд
Легко могу представить классы БД и Сессии, реализующие некий общий интерфейс (сохранить что-то, взять это самое что-то обратно). Но реализация методов save и load будет совершенно различной. |