За последние 24 часа нас посетил 44251 программист и 3101 робот. Сейчас ищут 995 программистов ...

ООП и примитивная модульность

Тема в разделе "PHP для новичков", создана пользователем Neka, 2 сен 2010.

  1. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Приветствую!
    Редактировать ООП код могу без проблем, но никогда не создавал код со своими классами с нуля. Решил восполнить этот пробел. И тут спорный вопрос вышел...

    Есть у меня класс db, который предназначен для работы с бд и есть класс error, который собственно логит ошибки. Может будут возможности, когда класса error не будет, или он будет тупо выключен в конфиге. Получается как-то сложно=. Вот так:
    PHP:
    1.  
    2. <?
    3. function query($query) {
    4.         if(!($q = mysql_query($query))) {
    5.             if($logging) {
    6.                 $error->log(mysql_error(), "mysql");
    7.             } else {
    8.                 if($debug) {
    9.                 echo mysql_error();
    10.                 }
    11.             }
    12.         }
    13.     }
    Как-нибудь, ну хоть чуть чуть можно упростить эти бесконечные ветвления для каждой функции класса db?
     
  2. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Фух, с этой бедой справился... Но ООП не проходит бесследно:

    Напомню, есть класс Db, в нем создается объект класса Error, в обоих конструкторах есть require_once("config.php");. Так вот, объект класса Bd дергает переменные с этого файла, а "внутри созданный" объект класса Error уже нет... Я понимаю, что файл уже вызван в конструкторе Bd, и в конструкторе Error он не включается, но как и туда передать переменные?
    Сделать глобальными?
    Передать в качестве параметра обьекту?
    К примеру в Жумле я ни того, ни того не встречал.

    Пока печатал, родился вопрос номер два:
    Я создаю обьект Error в классе Bd, будет например у меня еще один класс к примеру Man, и там нужно будет обьект Error. Если я создам его и там, будет ли это другой обьект, или только ссылка на первый обьект? Как решать эту проблему? Создавать обьект Error вне классов и делать его глобальным?

    Бррр... ООП не сложное, но эта инкапсуляция переменных и недоступность меня убивает=(
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)Сейчас в основном советуют для конфигов использовать класс-реестр.
    2)Будут разные объекты.
    3)Посмотрите паттерн синглтон.
     
  4. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    1) Создавать обьект в основном файле и делать его глобальным?
    2) Это плохо или хорошо, что в одном вызове программы 2 (скорее более) одинаковых обьекта?
    3) Принцип паттерна понятен, но опять же, в каждом отдельно взятом классе $Logger->getInstance() приведет к новому обьекту, т.к. они друг другу не видны. Создавать в основном файле глобальный обьект Logger?
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Я пока не еще не работал с реестром, потому чисто теоретические выкладки:
    1)Поиск по данному сайту. Тема поднималась несколько раз. Может там есть что.
    2)Поиск в гугле.
    3)Можно сделать класс со статическими методами.
    4)можно заюзать синглтон.
    5)Можно извратиться с иерархией наследования классов конфигов для разных частей программы, но пока не вижу от этого пользы.

    Если это удобно и понятно, то хорошо. Если это неудобно и/или не понятно, то плохо.

    Непонятен.

    1)Logger::getInstance().
    2)Ссылку на объект хранит сам класс и всем ее раздает.
    3)Я вообще пока логирую функциями.