Каюсь, забыл про статические переменные. Но тогда уж лучше так:Автор оригинала: jonjonson
korchasa, static был и в php4, но только для объявления переменных, а не свойств объекта.
Реализации синглетона в php4
http://phpclub.ru/faq/wakka.php?wakka=DesignPatterns/Singleton&v=4rn
...
function &getInstance($rawInstance = false)
{
static $instance;
if(false !== $rawInstance) {
$instance = $rawInstance;
}
if (!is_object($instance)) {
$instance = new Singleton(false);
}
return $instance;
}
...
Извините, вы серьезно?Автор оригинала: cDLEON
... Чем эти ограничения помогут разобраться в коде ?
Действительно, как я посмелАвтор оригинала: cDLEON
korchasa
А что похоже что я шучу ?
Обоснуйте, коль смеете делать такие заявления.
Клиенты синглтонов. Например, есть синглтон на что-то тяжелое (рарсер логов), или это вообще пока не существует (внешнее API какого то сервиса). В таком случае подменяем содержимое синглтона моком, и тестируем.Интересно, а чё тестить то нужно, заменяя объект в синглтоне?
так что не кчему ты это сказалerror_reporting = E_ALL
Клиенты класса - другие классы и функции.Автор оригинала: cDLEON
korchasa
Кто в данном случае выступает в роли "клиента" ? Программист? А зачем девелоперу закрывать эти методы от самого же себя? Какие это даёт плюсы ? Подчеркну то, что вопросы эти относятся исключительно к ПХП.
Инкапсюляция - отделение интерфейса от реализации. Часть методов класса относятся к его интерфейсу, часть к реализации. Те, что относятся к реализации закрывают от клиентов, чтобы не делать их зависимыми от нее (реализации).Об инкапсуляции я не забываю. То, что содержит объект для меня и есть та самая капсула с всевозможными методами для работы с ней.
Ну что же вы выводы то не делаетеКстати вы так и не поведали чем ваши private помогают разбираться в чужом коде.
Всю "реализацию" нужно делать в конструкторе. Ещё раз подчеркну, что всё, что я сказал применимо только к решению повседневных задач на ПХП. А все ваши выкрунтасы с private static ни к чему путному не приводят.Инкапсюляция - отделение интерфейса от реализации. Часть методов класса относятся к его интерфейсу, часть к реализации. Те, что относятся к реализации закрывают от клиентов, чтобы не делать их зависимыми от нее (реализации).
Т.е. вся ваша разбиралова в коде сводится к тому что ИДЕ не выводит приватных методов вне класса?Хинтинг того же Zend IDE выдаст вам варианты.
Судя по:Автор оригинала: cDLEON
korchasa
Всю "реализацию" нужно делать в конструкторе. Ещё раз подчеркну, что всё, что я сказал применимо только к решению повседневных задач на ПХП. А все ваши выкрунтасы с private static ни к чему путному не приводят.
Т.е. вся ваша разбиралова в коде сводится к тому что ИДЕ не выводит приватных методов вне класса?
Оригинально 8)
и остальной части разговора, вы не используете ООП, а просто объединяете функции в классы. Тоже вариант, хотя бы из-за отсутствия namespace'ов.Всю "реализацию" нужно делать в конструкторе.
В чём то вы правы, я иногда использую практику засовывать в один класс ф-и сходные по своей природе только ради того, что бы показать другим девелоперам в какой либе лежит файл с ними, да и тот же ИДЕ выдаёт всех их в листинге.и остальной части разговора, вы не используете ООП, а просто объединяете функции в классы. Тоже вариант, хотя бы из-за отсутствия namespace'ов.
Не задело 8)А насчет повседневности задач - у всех они разные: у кого-то - фидбэк формы писать, у кого-то - сложную бизнес логику строить
Смотря в чём эту "сложность" определять.Только пожалуйста не пишите, что РНР не подходит для сложных проектов.
Сделаем проще - покажите кусок какого нибудь кода, со сложной логикойАвтор оригинала: cDLEON
korchasa
В чём то вы правы, я иногда использую практику засовывать в один класс ф-и сходные по своей природе только ради того, что бы показать другим девелоперам в какой либе лежит файл с ними, да и тот же ИДЕ выдаёт всех их в листинге.
Но...И ООП я использую тоже и ключевое слово там ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ. А не РЕАЛИЗАЦИОННО-ИНТЕРФЕЙСНОЕ 8)
Традиционно в сложности бизнес логики: количество сущностей и количество связей.Смотря в чём эту "сложность" определять.
Гггг. Вы помоему помешались на своей бизнес логике.Традиционно в сложности бизнес логики: количество сущностей и количество связей.
Ну вот например. Правда валяется где то либа немного с большим функционалом...Но и эта сойдёт...ХМЛ парсер .Сделаем проще - покажите кусок какого нибудь кода, со сложной логикой
Типичные примеры использования набросайти, плиз, как либа ДОЛЖНА работать, без вас то я тесты не смогу написатьАвтор оригинала: cDLEON
Ну вот например. Правда валяется где то либа немного с большим функционалом...Но и эта сойдёт...ХМЛ парсер .
Ну так вы их напишите, а то, не дай бог, красоту решений поломаю.Автор оригинала: cDLEON
PHP:<?php $xml=new XMLparser(); $el=$xml->parse("<xml><child></child><child></child></xml>"); //А уже дальше пользуемся методами класса XMLobject ?>
private в php - это нечто декларотивное и не более того. Да, это флажок, но программисты на php не волки и не станут на него реагировать, если увидят простое решение с возможностью замены private на public.Private методы необходимы для того чтобы скрыть от клиентов методы, представляющие из себя реализацию класса. Такие методы чаще всего появляются после применения рефакторинга выделение метода (extract method).
cDLEON, ok, мне дебагер мой нравится, и мне не приходится писать код с ошибками возникающими во время выполнения приложения, мне нравитсяАга. Скорее всего дебагер твой сам включает репортинг E_STRICT. Потому что в ПХП5 E_STRICT не включена в E_ALL