Zend debugger и Pear не дружат

cDLEON

Онанист РНРСlub
korchasa
Моразм крепчал.
Синглтоны я строю обычном способом работающим на ПХП4.
Чем эти ограничения помогут разобраться в коде ?
 

jonjonson

Охренеть
korchasa, static был и в php4, но только для объявления переменных, а не свойств объекта.
Реализации синглетона в php4 :)
http://phpclub.ru/faq/wakka.php?wakka=DesignPatterns/Singleton&v=4rn
 

korchasa

LIMB infected
Автор оригинала: jonjonson
korchasa, static был и в php4, но только для объявления переменных, а не свойств объекта.
Реализации синглетона в php4 :)
http://phpclub.ru/faq/wakka.php?wakka=DesignPatterns/Singleton&v=4rn
Каюсь, забыл про статические переменные. Но тогда уж лучше так:
PHP:
...
    function &getInstance($rawInstance = false)
    {        
        static $instance;
        if(false !== $rawInstance) {
            $instance = $rawInstance;
        }
        if (!is_object($instance)) {
            $instance = new Singleton(false);
        }
        return $instance;
    }
...
Это позволит подменять объект, например, в тестах.

-~{}~ 28.09.07 10:52:

Автор оригинала: cDLEON
... Чем эти ограничения помогут разобраться в коде ?
Извините, вы серьезно?
 

cDLEON

Онанист РНРСlub
korchasa
А что похоже что я шучу ?
Обоснуйте, коль смеете делать такие заявления.

-~{}~ 28.09.07 11:03:

Интересно, а чё тестить то нужно, заменяя объект в синглтоне?
 

korchasa

LIMB infected
Автор оригинала: cDLEON
korchasa
А что похоже что я шучу ?
Обоснуйте, коль смеете делать такие заявления.
Действительно, как я посмел :D Тут всегда так общаются?

Private методы необходимы для того чтобы скрыть от клиентов методы, представляющие из себя реализацию класса. Такие методы чаще всего появляются после применения рефакторинга выделение метода (extract method).

Грустно, что люди забывают, что такое инкапсуляция. Зачем тогда вообще объекты использовать...

Интересно, а чё тестить то нужно, заменяя объект в синглтоне?
Клиенты синглтонов. Например, есть синглтон на что-то тяжелое (рарсер логов), или это вообще пока не существует (внешнее API какого то сервиса). В таком случае подменяем содержимое синглтона моком, и тестируем.
 

cDLEON

Онанист РНРСlub
tf
Ага. Скорее всего дебагер твой сам включает репортинг E_STRICT. Потому что в ПХП5 E_STRICT не включена в E_ALL
korchasa
Кто в данном случае выступает в роли "клиента" ? Программист? А зачем девелоперу закрывать эти методы от самого же себя? Какие это даёт плюсы ? Подчеркну то, что вопросы эти относятся исключительно к ПХП.

Об инкапсуляции я не забываю. То, что содержит объект для меня и есть та самая капсула с всевозможными методами для работы с ней.

Кстати вы так и не поведали чем ваши private помогают разбираться в чужом коде.
 

korchasa

LIMB infected
Автор оригинала: cDLEON
korchasa
Кто в данном случае выступает в роли "клиента" ? Программист? А зачем девелоперу закрывать эти методы от самого же себя? Какие это даёт плюсы ? Подчеркну то, что вопросы эти относятся исключительно к ПХП.
Клиенты класса - другие классы и функции.
Об инкапсуляции я не забываю. То, что содержит объект для меня и есть та самая капсула с всевозможными методами для работы с ней.
Инкапсюляция - отделение интерфейса от реализации. Часть методов класса относятся к его интерфейсу, часть к реализации. Те, что относятся к реализации закрывают от клиентов, чтобы не делать их зависимыми от нее (реализации).
Кстати вы так и не поведали чем ваши private помогают разбираться в чужом коде.
Ну что же вы выводы то не делаете :(
Если вы используете private для методов отвечающих за внутренний функционал класса. То публичные методы будут представлять из себя интерфейс класса. Хинтинг того же Zend IDE выдаст вам варианты.
 

cDLEON

Онанист РНРСlub
korchasa
Инкапсюляция - отделение интерфейса от реализации. Часть методов класса относятся к его интерфейсу, часть к реализации. Те, что относятся к реализации закрывают от клиентов, чтобы не делать их зависимыми от нее (реализации).
Всю "реализацию" нужно делать в конструкторе. Ещё раз подчеркну, что всё, что я сказал применимо только к решению повседневных задач на ПХП. А все ваши выкрунтасы с private static ни к чему путному не приводят.
Хинтинг того же Zend IDE выдаст вам варианты.
Т.е. вся ваша разбиралова в коде сводится к тому что ИДЕ не выводит приватных методов вне класса?
Оригинально 8)
 

korchasa

LIMB infected
Автор оригинала: cDLEON
korchasa

Всю "реализацию" нужно делать в конструкторе. Ещё раз подчеркну, что всё, что я сказал применимо только к решению повседневных задач на ПХП. А все ваши выкрунтасы с private static ни к чему путному не приводят.

Т.е. вся ваша разбиралова в коде сводится к тому что ИДЕ не выводит приватных методов вне класса?
Оригинально 8)
Судя по:
Всю "реализацию" нужно делать в конструкторе.
и остальной части разговора, вы не используете ООП, а просто объединяете функции в классы. Тоже вариант, хотя бы из-за отсутствия namespace'ов.

А насчет повседневности задач - у всех они разные: у кого-то - фидбэк формы писать, у кого-то - сложную бизнес логику строить ;)
ЗЫ: Только пожалуйста не пишите, что РНР не подходит для сложных проектов.
 

cDLEON

Онанист РНРСlub
korchasa
и остальной части разговора, вы не используете ООП, а просто объединяете функции в классы. Тоже вариант, хотя бы из-за отсутствия namespace'ов.
В чём то вы правы, я иногда использую практику засовывать в один класс ф-и сходные по своей природе только ради того, что бы показать другим девелоперам в какой либе лежит файл с ними, да и тот же ИДЕ выдаёт всех их в листинге.
Но...И ООП я использую тоже и ключевое слово там ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ. А не РЕАЛИЗАЦИОННО-ИНТЕРФЕЙСНОЕ 8)

А насчет повседневности задач - у всех они разные: у кого-то - фидбэк формы писать, у кого-то - сложную бизнес логику строить
Не задело 8)
Только пожалуйста не пишите, что РНР не подходит для сложных проектов.
Смотря в чём эту "сложность" определять.
 

korchasa

LIMB infected
Автор оригинала: cDLEON
korchasa

В чём то вы правы, я иногда использую практику засовывать в один класс ф-и сходные по своей природе только ради того, что бы показать другим девелоперам в какой либе лежит файл с ними, да и тот же ИДЕ выдаёт всех их в листинге.
Но...И ООП я использую тоже и ключевое слово там ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ. А не РЕАЛИЗАЦИОННО-ИНТЕРФЕЙСНОЕ 8)
Сделаем проще - покажите кусок какого нибудь кода, со сложной логикой :)

Смотря в чём эту "сложность" определять.
Традиционно в сложности бизнес логики: количество сущностей и количество связей.
 

cDLEON

Онанист РНРСlub
Традиционно в сложности бизнес логики: количество сущностей и количество связей.
Гггг. Вы помоему помешались на своей бизнес логике.
Если вы уже сложность проекта начали считать сложностью бизнес логики, то о чём можно говорить дальше?
Сделаем проще - покажите кусок какого нибудь кода, со сложной логикой
Ну вот например. Правда валяется где то либа немного с большим функционалом...Но и эта сойдёт...ХМЛ парсер .
 

korchasa

LIMB infected
Автор оригинала: cDLEON
Ну вот например. Правда валяется где то либа немного с большим функционалом...Но и эта сойдёт...ХМЛ парсер .
Типичные примеры использования набросайти, плиз, как либа ДОЛЖНА работать, без вас то я тесты не смогу написать :)
 

cDLEON

Онанист РНРСlub
PHP:
<?php
$xml=new XMLparser();
$el=$xml->parse("<xml><child></child><child></child></xml>");
//А уже дальше пользуемся методами класса XMLobject
?>
 

korchasa

LIMB infected
Автор оригинала: cDLEON
PHP:
<?php
$xml=new XMLparser();
$el=$xml->parse("<xml><child></child><child></child></xml>");
//А уже дальше пользуемся методами класса XMLobject
?>
Ну так вы их напишите, а то, не дай бог, красоту решений поломаю.
 

jonjonson

Охренеть
korchasa, я понимаю, что тема несколько другая, но всё же хочу ответить на
Private методы необходимы для того чтобы скрыть от клиентов методы, представляющие из себя реализацию класса. Такие методы чаще всего появляются после применения рефакторинга выделение метода (extract method).
private в php - это нечто декларотивное и не более того. Да, это флажок, но программисты на php не волки и не станут на него реагировать, если увидят простое решение с возможностью замены private на public. :)
 

cDLEON

Онанист РНРСlub
korchasa
Вы попросили кусок кода ? Я вам его предоставил.
Остальным, пожалуйсто занимайтесь сами. Я, думаю, свою точку зрения уже отстоял.
 

tf

крылья рулят
Ага. Скорее всего дебагер твой сам включает репортинг E_STRICT. Потому что в ПХП5 E_STRICT не включена в E_ALL
cDLEON, ok, мне дебагер мой нравится, и мне не приходится писать код с ошибками возникающими во время выполнения приложения, мне нравится
 

cDLEON

Онанист РНРСlub
tf
В дебагере тоже можно отключить вывод этих ошибок.
Хочешь писать как крутой перец с этим мусором - пиши, я не запрещаю, я высказываю собственную точку зрения - не более.
 
Сверху