onPHP's early announce

svetasmirnova

маленький монстрик
onPHP's early announce

Упомянутый репозиторий в теме об "абстрактном синглтоне" http://phpclub.ru/talk/showthread.php?postid=417460#post417460,
не смотря ни на что - живет и развивается.

За сим и приглашаем к ознакомлению:

SVN-репозиторий с анонимным доступом https://svn.shadanakar.org/onPHP,

WebSVN http://svn.shadanakar.org/listing.php?repname=onPHP&path=/&sc=0

Неполный список основных фич https://svn.shadanakar.org/onPHP/FEATURES

Русскоязычная рассылка: [email protected]

Рассылка коммитов: [email protected]

-------------
onPHP developers team

(т.е.
svetasmirnova и versinger от имени onPHP developers team)
 

StUV

Rotaredom
svetasmirnova
у вас есть развернутая структура ваших модулей ?
т.е. дерево-что-где-лежит и дерево наследования ?
(сложно запомнить сразу где-что, с учетом закрывания развернутой ветви после перехода к другой)

если есть - можно ссылку плиз ?
спасибо

зы: пока классов не так много - имело бы смысл пройтись по библиотеке и в шапки помимо копирайта добавить по 1-2 строки описания - что это и зачем
 

svetasmirnova

маленький монстрик
>у вас есть развернутая структура ваших модулей ?
К сожалению, документация пока фактически отсутствует: у всех работа и времени на написание катастрофически не хватает. Так что выложено пока то, что есть. При добавлении новых возможностей/радикальном изменении старых обычно в лист идёт более-менее подробное описание с примерами.
 

Voxus

founder (Старожил PHPCluba)
Автор оригинала: StUV
зы: пока классов не так много - имело бы смысл пройтись по библиотеке и в шапки помимо копирайта добавить по 1-2 строки описания - что это и зачем
в некоторых так и сделано (CommonDAO/CachePeer, etc), до некоторых просто руки не дошли.

покамест наиболее эффективный способ понять что и как работает - задать конкретный вопрос (либо здесь, либо в рассылку). на примерах понять буддет гораздо проще.
 

StUV

Rotaredom
вопрос по поводу синглтонов:

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

Т.е. как пример - если необходимо одновременно использовать два объекта для работы с двумя разными базами (напр., если базы находятся на разл. серверах - проще будет создать два коннекта, чем постоянно переключать один и тот же объект).

Собственное решение - в массиве инстансов сохранять не имя класса, а хэш построенный из имени класса и сериализованного массива параметров?

Есть еще какие-нибудь мысли?
 

crocodile2u

http://vbolshov.org.ru
Я однажды сделал следующим образом - необязательным параметром для синглтона был $force_new_instance = false. При установке его в TRUE синглтон обязан вернуть новый инстанс. К сожалению, это не совсем то, что нужно - второй раз из синглтона объект, созданный таким образом, не получить. Я использовал такой подход там, где в этом не было необходимости.

Еще мысль - передавать в синглтон как параметр ключ в массиве инстансов. Если такой ключ уже есть, вернуть требуемы объект. Нет - создать новый объект. Но это все же больше похоже на костыль, чем на нормальное решение.
хэш построенный из имени класса и сериализованного массива параметров
Честно говоря, ничего универсальнее в голову не приходит. Вот только некрасиов как-то (имхо)
 

svetasmirnova

маленький монстрик
вопрос по поводу синглтонов:

есть ли у вас решение для создания более одного объекта некоторого класса, но с различным набором параметров инициализации ?
Тогда это не синглтон.
Singletone.class.php абстрактный, что мешает унаследовать от него 2 (N) различных класса и использовать? Будут 2 (N) различных instance.
 

StUV

Rotaredom
Тогда это не синглтон.
не суть важно что - главное принцип решения... =)

что мешает унаследовать от него 2 (N) различных класса и использовать?
ни к чему плодить классы - зачем ?
смысл в том, что иногда необходимо N > 1 "персистент" экзеипляров некоторого класса
синглтон позволяет реализовать необходимое при N==1
небольшое расширение дает реализацию для N > 1
(в крайнем случае - изменение не самого синглтона, а расширение в некотором дочернем классе)

----
зы: можно заменить массив $instances некоторым обектом-контейнером персистент-объектов с возможностью хранения нескольих экземпляров одного класса
главный вопрос - как "элегантнее" обеспечить идентификацию?
 

svetasmirnova

маленький монстрик
Голова болит :(
Ну что-то типа:
PHP:
if (isset($instances[$class][$params])
throw new PersistentInstancedClassException($instances[$class][$params]);
 

syfisher

TDD infected!!
Находясь под впечатлением от книги Working Effectively With Legacy Code, хочу сделать одно маленькое замечание насчет Singleton-ов. Сделайте плиз метод setInstance(). Это позволит делать подмену одиночек в тестах.
 

syfisher

TDD infected!!
понятна!! Что ж, жаль. Ну ничего, вы тоже когда-нибудь этим заболеете :)
 

svetasmirnova

маленький монстрик
понятна!! Что ж, жаль. Ну ничего, вы тоже когда-нибудь этим заболеете
Больные - и тяжело - есть, но вот зараза на остальных пока не передаётся: закалённые :)
 

svetasmirnova

маленький монстрик
Насколько я понимаю, временное явление. Сервером не я занимаюсь, поэтому точнее сказать не могу.
 

Voxus

founder (Старожил PHPCluba)
Автор оригинала: svetasmirnova
Насколько я понимаю, временное явление.
нет, явление перманентное. те ссылки, что были в svn - побились из-за реструктуризации репозитория.

сейчас отдельную тему с анонсом форкну.
 
Сверху