За последние 24 часа нас посетили 33055 программистов и 1756 роботов. Сейчас ищут 883 программиста ...

Реализация структуры ООП (Админка)

Тема в разделе "Прочие вопросы по PHP", создана пользователем newnoob, 23 авг 2007.

  1. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Имеем файл Backoffice.php его содержимое:

    Код (Text):
    1.  
    2. require_once('backoffice/SysBlock.php');
    3. require_once('backoffice/News.php');
    4. require_once('backoffice/Auth.php');
    5.  
    6. class Backoffice extends Controller {
    7.  
    8.     function Backoffice()
    9.     {
    10.         parent::Controller();  
    11.     }
    12.  
    13.     function Login()
    14.     {
    15.         Auth::Login();
    16.     }
    17.  
    18.     function News_Add()
    19.     {
    20.         News::News_Add();
    21.     }
    22.  
    23.     function News_List()
    24.     {
    25.         News::News_List();
    26.     }
    27.  
    28.     function Index()
    29.     {
    30.         if($this->userlib->logged_in())
    31.         {
    32.             $this->News_List();
    33.         } else {
    34.             $this->Login();
    35.         }
    36.     }
    37. }
    Кинул не весь файл, думаю суть будет и так ясна. Вообщем в данном варианте всё работает и без проблем как мне нужно, но я бы не хотел видеть всякие там require_once и News::News_List(). Суть в том что когда идет класс backoffice то он и вызывается site.com/backoffice/ , если в нем прописывать так как я писал выше то он выводит site.com/backoffice/news_list/ всё замечательно, но ни делать же мне постоянно News::News_List хотелось бы какой то автоматизации этого процесса, вот собсна и вопрос (Знаю что намудрил, если не понятно то спросите я всё выкину и на всё отвечу что могу, ну очень нужно разобратся с этим побыстрее) ):
     
  2. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    newnoob
    По-моему, это опять пример того, как не надо использовать ООП ;)
    Почему у тебя класс Админки знает о классе Новостей? И не просто знает, а вызывает новостные методы? А если в будущем появится Гостевая? Придется переписывать класс Админки?

    Одно из преимуществ ООП: ты создаешь базовый класс (скажем, ПлугинАдминки) и работаешь с базовым классом. Появилось в системе новое понятие - создаешь новый класс на основе базового, НО: везде по-прежнему работаешь с плугином как с базовым. Появился новый плугин - просто добавил его в систему, настроил его использование по минимуму и все работает без больших изменений.
     
  3. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Тогда объясните на примере плиз. Главный файл: backoffice.php:

    Лежит в корне.

    PHP:
    1.  
    2. <?php
    3.  
    4. class Backoffice extends Controller {
    5.  
    6.     function Backoffice()
    7.     {
    8.         parent::Controller();  
    9.     }
    10.  
    11.     function Index()
    12.     {
    13.         if($this->userlib->logged_in())
    14.         {
    15.             $this->News_List();
    16.         } else {
    17.             $this->Login();
    18.         }
    19.     }
    20. }
    21.  
    22. ?>
    23.  
    Вызывается site.com/backoffice/ .

    Модуль к примеру Help.php лежит в папке backoffice (Хоть для какого то удобства работы с файлами и понятия где какие модули :) ):

    PHP:
    1.  
    2. <?php
    3.  
    4. class Help extends Controller {
    5.  
    6.     function Help()
    7.     {
    8.         parent::Controller();  
    9.     }
    10.  
    11.     function Index()
    12.     {
    13.  
    14.         echo 'help';
    15.  
    16.     }
    17.  
    18. }
    19.  
    20. ?>
    21.  
    Модули админки я складываю в папку backoffice/ тоесть вызов уже идет не site.com/backoffice/news_list/ а site.com/backoffice/backoffice/news_list/ суть вопроса как побороть 1 раз backoffice в вызове нужно просто : site.com/backoffice/news_list/
     
  4. host

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

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    Dagdamor
    вот вот. Кажется все так (большинство), хотя уже и не отрицаю, при правильном использовании ООП нужно и что все-таки все в кучу делать не стоит :)
     
  5. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Все когда то учатся, у мя конкретная задача не понимаю как организовать структуру ):
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    1. я давно гружу классы через __autoload()
    2. проектирование ООП модели дело очень тонкое. надо как минимум понимать основные паттерны. ну ттам атом, синглетон, контроллер, вьюха и т.д. тогда проектирование какой либо компоненты сводится к написанию основных методов и регистрации их в нужных местах. далепе все подключается автоматом.

    мы скйчас заканчиваем как раз движок чисто на ООП. чуток попозже выложу структуру


    p.s. и самое главное в ООП не переборщить с абстракцией, а то потом мозги сам свернешь...