ООП для CMS

player

Новичок
ООП для CMS

Добрый день!!

Есть такая задача:

нужен движок ЦМС в ООП, где и возникает проблема с областями действия переменных и классов

например есть класс Sitemap, в котором создается дерево сайта.
этому классу нужны другие объекты, например объект DB, объект Verify, который проверяет параметры от юзера..

Теперь вопрос: как сделать чтобы эти объекты лучше всего вплести в ЦМС, какой вариант лучше.

1. В каждой функции использовать global

2. Видел вариант, где есть класс Main. В нем есть разные переменные, например
PHP:
 $sitemap=null;
$db=null;
$verify= null;
и тд..
и функции, которые подгружают эти объекты
PHP:
 loadVerify(){}
loadDB(){}
loadSitemap(){}
если надо юзать какуюнить функцию, надо подгрузить объект, и использовать
$main->verify->oneOfVerifyFunctions();

Но в этом случае пропадает назависимость классов друг от друга

Как бы вы решили эту проблему, может быть у вас есть свой подход..
Жду ответов. Заранее спасибо
 

chown

Новичок
сперва нужно понять разницу между ООП и процедурным программированием и выбрать для своего варианта то что надо. Не надо искать в ООП панацею от всех бед. Вы только проблем не оберётесь. и тем и другим методом можно реализовать вашу задачу.
 

dimagolov

Новичок
player, на этом форуме с переодичностью раз в неделю-две появляются многостраничные треды на тему правильного ООП проектирования. почитайте их за последние пол-года хотя бы, глядишь и вопросов станет меньше и они будут более осмысленные
 

player

Новичок
и тем и другим методом можно реализовать вашу задачу.
это мне тоже ясно..
я хочу комбинировать и то и то, просто спросил как использовать методы других классов внутри объектов.. что в этом противозаконного?

Щас посмотрю на форуме..
 

whirlwind

TDD infected, paranoid
> я хочу комбинировать и то и то, просто спросил как использовать методы других классов внутри объектов

Если комбинировать, то никогда не научишься выделять сущности.

>Но в этом случае пропадает назависимость классов друг от друга

Независимость классов будет соблюдаться, если их не использовать в качестве пространства имен. Например, вместо

$main->verify->oneOfVerifyFunctions();

использовать интерфейс верификатора

PHP:
interface IVerifier {
     function verify();
}

class FirstVerificationAlgo {
    function verify(){
        // TODO: 
    }
}

class SecondVerificationAlgo {
    function verify(){
        // TODO: 
    }
}


$main->setVerificator(new FirstVerificationAlgo());
$main->вызовМетодаКоторыйИспользуетВерификатор();

$main->setVerificator(new SecondVerificationAlgo());
$main->вызовМетодаКоторыйИспользуетВерификатор();
Как видете, два раза вызываются verify разной реализации, но $main не обременен необходимостью знать сколько там в верификаторе XXXOfVerifyFunctions() функций. Это и есть независимость.
 

player

Новичок
Люди, тогда я буду потихоньку вкуривать ООП, только подскажите плиз, в одном, не таком обширном (нужно сильно):

Как вы посоветуете делать?
Просто класс sitemap, и в конструктор передать $db

И, скажем если нужен еще какойто класс (verify) в какомнить методе $sitemap, то лучше глобал сделать, или как?

whirlwind
Спасибо. Вот только я с интерфейсами не знаком еще - примечу на будущее. Поумнею, почитаю, пойму
 

whirlwind

TDD infected, paranoid
Все передавай в конструктор. Если приходится впрыскивать слишком много... ну это в общем другая тема уже.
 

player

Новичок
Отлично. Спасибо, будет время, займусь мудростями ООП
 
Сверху