| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Объявить класс, использовать, переобъявить - как? |
| Автор: Win MK 32 2.3.2009, 18:36 | ||||
| У меня есть класс обработки ошибок, статические методы которые могут выводить ошибку в удобном для разработчика виде на страницу или на почту. Далее в коде я объявляю класс для работы с почтой. И тут появляется делемма. Мне надо в первом классе (логирования) использовать возможности работы с почтой из другого класса. А в классе по работе с почтой - выводить ошибку через класс обработки ошибок. Решил, что было бы здорово переобъявить первый класс. Упрощенно говоря так:
Но вот беда, так не выходит. Расскажите пожалуйста, как мне "пересоздать" класс? Добавлено через 12 минут и 33 секунды Нашел способ. Но может есть что-то более логичное?
http://ru.php.net/manual/ru/function.classkit-method-copy.php |
| Автор: gta4kv 2.3.2009, 19:08 |
| вы убили весь смысл ооп :( |
| Автор: krundetz 2.3.2009, 19:43 |
угу более логичным будет наследование одного класса от другого или инкапсулирования одного класса в другом +1 Win MK 32, прежде чем использовать ООП хорошо бы сначало почитать что нибудь толковое, про то как это работает вообще |
| Автор: Win MK 32 2.3.2009, 19:58 |
| Читал. Все понятно, но не понятко в каких случаях как поступать. Что делать? Добавлено через 13 минут и 30 секунд Привидите пожалуйста пример, как в этом случае можно поступить? С наследованием вроде бы понятно. Жаль я о нем забыл напрочь. |
| Автор: gta4kv 2.3.2009, 22:10 | ||||
Но вообще забудьте ООП еще на годик, вы его не используете. Класс — просто оболочка для функций у вас. Добавлено @ 22:11
крайне сомневаюсь. |
| Автор: bars80080 3.3.2009, 00:38 |
| да нет, то что читал и понял - это нормальное явление. однако понимания смысла (прочувствовать магию ООП) ещё не получилось а раз так, то всё же лучше им не пользоваться |
| Автор: bars80080 3.3.2009, 21:47 |
имеется ввиду не сочиняя самому. пользоваться чужими конечно надо. а то наделаешь трёхэтажный экскаватор, там где нужна сапёрная лопатка |
| Автор: Win MK 32 5.3.2009, 00:46 |
Вы правы. Но я не знаю как быть. Я в общем-то уже год занимаюсь PHP. Свою первую CMS стал писать где-то месяца два назад. И вот только только начал ООП добавлсять. Но ничего не могу с собой поделать, пока это как "подсластитель для функций". А что мне делать? Год еще тянуть - не вижу смысл. Надо двигаться. Фраза "ООП не всем дано" меня пугает. Чтож мне теперь закопать себя в землю, что я пока не понял? Я упорный и научусь если буду знать как...! =) |
| Автор: gta4kv 5.3.2009, 09:01 | ||||
Win MK 32, если ты считаешь что уже достаточно знаешь PHP наивный раб, то почитай книгу чисто про http://www.ozon.ru/context/detail/id/3888801/. (именно в PHP, ибо язык умеет гораздо меньше в плане ООП чем, например, Java)
А откуда у тебя тут $USER берётся? ;-) Примерно вот так:
|
| Автор: Win MK 32 6.3.2009, 21:47 | ||||||
Понятия не имею. Вроде читал две книги по PHP. Я могу про себя сказать, как иногда говорят про англоучащихся: "На PHP пишу, пользуясь словарем(мануалами)". То есть открываю для себя время от время новое (время идет, в PHP куча нового появляется). Запросто может быть такое, что я какие-то модные вещи не знаю gzip например не умею юзать или кэш. Но тут уж всего не упомнишь.
Классы почты и логирования ошибок я инклюжу уонс в индекс пхп аж после проверки авторизации. Поэтому $ЮЗЕР - это массив юзера. Он не существует, если не существует авторизации.
Да, у меня есть массив $LANG, он инклюдится тоже в начале.
Да, тут будет функционал обрамления тегами <pre>, умирания скрипта после вывода etc. А также запрета вывода вывода элементов массива с заданными ключами (дабы исключить случай вывода конфиденциальной информации. Боюсь привиденная вами архитектура не совсем то, что я имел в виду. (тем не мене спасибо что написали ее, может быть у меня не верные цели). Мой замысел таков: в любом месте кода я должен мочь включить любой метод любого класса: 1) email::admin Отправить почту админу (в случае ошибки происходит логирование действия (класс loging::[$LANG['DEFAULT_METHOD']]) - типа того - это я уже на ходу придумал про дефолт метод. 2) email::user Отправить почту главному герою (юзеру, который загружает страницу и имеет авторизацию) (ошибка? значит логирование!) 3) email::id Отправить почту юзеру с id (тоже...) 4) email::mail ну а это базовая функция (тоже...) 5) email::htmlmail это базовая функция для отправки почты в формате HTML (тоже...) 6) loging::write логирование в виде вывода на страницу - проще говоря 7) loging::email логирование в виде отправки на мыло админу-вебмастеру Как видно 1-5 использует 6и7; 7 использует 4и5. Нормльный замысел? Добавлено через 3 минуты и 32 секунды Рекурсия? |
| Автор: gta4kv 6.3.2009, 22:58 | ||
| Ну, начнем с того что $LANG не будет доступен в классе. (см. http://ru.php.net/manual/ru/language.variables.scope.php) т.е будет разумнее 1) отказаться от статики 2) сделать singleton (хотя если у вас не большой скрипт, то лучше просто добавить метод getInstance в нужный класс (см. класс singleton )) 3) сделать типа init(), и передавать ему $LANG:
|