Приветствую! Редактировать ООП код могу без проблем, но никогда не создавал код со своими классами с нуля. Решил восполнить этот пробел. И тут спорный вопрос вышел... Есть у меня класс db, который предназначен для работы с бд и есть класс error, который собственно логит ошибки. Может будут возможности, когда класса error не будет, или он будет тупо выключен в конфиге. Получается как-то сложно=. Вот так: PHP: <? function query($query) { if(!($q = mysql_query($query))) { if($logging) { $error->log(mysql_error(), "mysql"); } else { if($debug) { echo mysql_error(); } } } } Как-нибудь, ну хоть чуть чуть можно упростить эти бесконечные ветвления для каждой функции класса db?
Фух, с этой бедой справился... Но ООП не проходит бесследно: Напомню, есть класс Db, в нем создается объект класса Error, в обоих конструкторах есть require_once("config.php");. Так вот, объект класса Bd дергает переменные с этого файла, а "внутри созданный" объект класса Error уже нет... Я понимаю, что файл уже вызван в конструкторе Bd, и в конструкторе Error он не включается, но как и туда передать переменные? Сделать глобальными? Передать в качестве параметра обьекту? К примеру в Жумле я ни того, ни того не встречал. Пока печатал, родился вопрос номер два: Я создаю обьект Error в классе Bd, будет например у меня еще один класс к примеру Man, и там нужно будет обьект Error. Если я создам его и там, будет ли это другой обьект, или только ссылка на первый обьект? Как решать эту проблему? Создавать обьект Error вне классов и делать его глобальным? Бррр... ООП не сложное, но эта инкапсуляция переменных и недоступность меня убивает=(
1)Сейчас в основном советуют для конфигов использовать класс-реестр. 2)Будут разные объекты. 3)Посмотрите паттерн синглтон.
1) Создавать обьект в основном файле и делать его глобальным? 2) Это плохо или хорошо, что в одном вызове программы 2 (скорее более) одинаковых обьекта? 3) Принцип паттерна понятен, но опять же, в каждом отдельно взятом классе $Logger->getInstance() приведет к новому обьекту, т.к. они друг другу не видны. Создавать в основном файле глобальный обьект Logger?
Я пока не еще не работал с реестром, потому чисто теоретические выкладки: 1)Поиск по данному сайту. Тема поднималась несколько раз. Может там есть что. 2)Поиск в гугле. 3)Можно сделать класс со статическими методами. 4)можно заюзать синглтон. 5)Можно извратиться с иерархией наследования классов конфигов для разных частей программы, но пока не вижу от этого пользы. Если это удобно и понятно, то хорошо. Если это неудобно и/или не понятно, то плохо. Непонятен. 1)Logger::getInstance(). 2)Ссылку на объект хранит сам класс и всем ее раздает. 3)Я вообще пока логирую функциями.