Вопросы по ООП в PHP

8.11K
.
L!MP
~XeOn~, синглтон это шаблон проектирования, а шаблон проектирования - это устоявшееся решение какой-то проблемы.

Синглтон, конкретно, решает одну проблему - гарантирует, что у класса будит лишь один экземпляр обьекта.
Для этой задачи он "придумывался" и для этой задачи его применение абсолютно оправдано.

Другое дело, когда посредством синглтона пытаются решить другие проблемы, такие как, кпримеру, управление зависимостями, т.е все зависимости в проекте получаются через классы-синглтоны.
.
L!MP, Вот ты пишешь что статика это не ООП, тогда зачем она?. Например зачем делать класс с функциями не статичным, если там ненужен конструктор. Просто вызов функций и все.
.
Или тот же регистри, 2-4 статичных метода - вот и весь класс.
.
~XeOn~, юзай синглтон только тогда, когда без него уж совсем не обойтись
Я тоже по началу наступил на теже грабли что и ты, юзал статику везде и всюду и плевался от объектов. Потом таки потихоньку начал использовать объекты ну и сейчас у мну в текущем проекте ни единого статического метода и свойства и все работает так как я и задумывал.
.
Screamer, А класс функций через конструктор что-ле? О_о
$functions = new Functions;
echo $functions -> someAtion();

так что-ли?
.
~XeOn~, то что статика не ООП, не отменяет того, что она нужна, а по поводу:
зачем делать класс с функциями не статичным, если там ненужен конструктор


Делать класс статичным или нет зависит не от того, есть у нас конструктор, или нет, а от того, нужен ли нам обьект или нет.

Вот в твеём Template, нужен был обьектный контекст, а ты его статически заделал.
В результаете такая штука у тебя не работает:

$Tpl->assign('title', 'title') 
        ->assign('content', 'content')
.
L!MP, Когда он через instance() вызывался, тоесть синглтон, то работала та штука.
.
~XeOn~, как тебе угодно, я сделал так, те функции которые используются везде и всюду вынес в глобальную область, например функция вывода ссылок
(string) anchor(string uri, string title)

Остальные вынес в плагины и в контроллере когда это необходимо загружаю плагин и юзаю его.
Сами плагины и контроллеры наследуются от единого класса который предоставляет доступ к объектам (MySQLi, Конфиги, Пути, Шаблонизатор и т.д.)
Например постраничная навигация
$pagination = $this->load_plugin('pagination');
$limit = $pagination->prepare($base_url, $total, $current_page);
// Тут получаем и обрабатывем данные 
// ...
$pagination = $pagination->create_links();

Для юзверей один плагин, для капчи другой плагин, для комментов третий плагин, для загрузки файлов четвертый плагин.
.
Screamer (06.11.2012 / 18:01)
и сейчас у мну в текущем проекте ни единого статического метода и свойства
Во всём должна быть причинно-следственная связь.

Кпримеру: - "я отказался от использования статических зависимостей, потому что пишу модульные тесты для своего кода и испытываю трудности с изоляцией тестируемых классов".

В твоём случае, что тебя сподвигло на это?
.
Screamer
L!MP, тем функциям нужен был доступ основным объектам и что бы дать им это нужно было загнать их все в этот гребаный статический класс что мне не понравилось, ибо постоянно таскать всю эту байду с собой для меня не гут, тут в голову пришла идея разбить все это на плагины и в итоге я загружаю нужные функции только тогда когда это нужно. Ну и конечно сыграло роль моё отношение к статике, теперь я наоборот плююсь от статики и тянусь к объектам
Всего: 383