возможно ли создать константный объект?

zerkms

TDD infected
Команда форума
if (isset($this->variables[$key]) == true) {
заменить на
array_key_exists

в __get() вспоминть, что данные нужно таки возвращать, если они есть

get,set заменить на __get/__set

как-то так
 

findnext

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

-~{}~ 05.05.09 11:40:

я там ещё remove() добавил :) жду критики со стороны ТС
 

AmdY

Пью пиво
Команда форума
у меня в классе Regisrty есть метод lock, запрещающий сетить переменную, но это не гарантирует неизменность, так как там хранятся объекты.
 

AmdY

Пью пиво
Команда форума
спасибо, но это излишне, для меня главное, чтобы не нашёлся умник, который случайно перепишет переменную с кэшем или виьюхой. хотя после того как в одном из экшинов в проекте на ZF нашёл mysql_connect и т.д., я уже ни в чём не уверен, фантазия у народа воистину безгранична :(
 

weregod

unserializer
кстати, почему бы не пронаследоваться от класса, имеющего методы:

lock
unkock
isLocked или locked

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

прошу про производительность не упоминать ;)
 

domino

Новичок
2 zerkms: на самом деле, геттеры и сеттеры не подходили к этому решению. потому что рид онли свойства были не конечной целью. в рамках архитектуры есть пул объектов, который предоставляет через ядро всем желающим методы типа get_instance и само ядро определяет кому-какой объект создать и с камими привелегиями. так вот. исходя из этой задачи, соответственно, появляются классы, которые могут получать клон объекта из пула и делать с ним что угодно, классы, которые могут получать сам объект и на своё усмотрение его как-то менять и классы, которые могут только пользоваться созданным объектом с гарантией того, что они его не изменят никогда ну ни коим образом. слабое место пула объектов в том, что мы взяли объект в определённом состоянии и в том же состоянии должны его вернуть. и в этом месте возникает человеческий фактор )) тут можно спросить - почему бы всем стрёмным классам не давать клон и пусть кромсают его как хотят. ответ будет такой - система эволюционирует. и правила игры могут изменится. сегодня этот класс получил клон, а завтра с чьей-то лёгкой руки он получит объект. ну, вызовет кто-то не в том месте get_instance с параметрами по умолчанию ) так что геттеры мне не подошли и я решил это просто в лоб тупым добавлением массива с аттрибутами. достаточно при создании объекта задать аттрибут рид онли и вопрос снят. поскольку запросы на создание объектов выполняет ядро через непосредственное общение с пулом объектов, то ядро и решение принимает на то, какой аттрибут выставить. т.е. всякие многочисленные манагеры этого ядра. тогда при попытке изменить состояние объекта, ядро читает его аттрибуты, смотрит на то, кто эти аттрибуты установил и если у пользователя меньше прав, его посылают. всё. )) спасибо за помощь. ))

2 findnext: спасибо за помощь )

2 Lightning: я у себя сделал примерно то же самое что ты и предложил с констант мод. я устанавливаю аттрибуты в которых есть рид онли и это работает так же. разница только в том, что я не обращаюсь к своёству объекта напрямую, неявно вызывая сеттер, поэтому проверка производится не в сеттере, а в пуле объектов - на уровень выше. там и отсекаются все попытки вызывать потенциально опасные методы.


2 dimagolov: виват! )) как замечательно, что есть такие мудрые гуру как ты, к тому же, умеющие читать мысли и на 99% знающие кому чего надо )) и силой мега ЧСВ решающие чья задача высосана из пальца, а чья нет )) может тебе стоит сменить профессию с программера на заместителя бога? ) ты бы неплохо смотрелся в небесной канцелярии с такими-то способностями. реально снимаю шляпу ) браво ) дожди замучали, а тут такое веселье и нахаляву ))
 

zerkms

TDD infected
Команда форума
2 zerkms: на самом деле, геттеры и сеттеры не подходили к этому решению. потому что рид онли свойства были не конечной целью.
вот поэтому изначально нужно описывать ситуацию полностью. настоящую ситуацию, а не огрызки и упрощения.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
domino
твой сарказм приведет к тому, что отвечать тебе будет только такие же [молодые специалисты], как ты
 

domino

Новичок
2 grigori: т.е. ты хочешь сказать, что если у чела 2 тыс. массаг, нужно от него терпеть любое хамство? ) только из-за того, что он супер пупер мега крут? ) знаешь, в сети не только этот форум ) это во-первых. и во-вторых, про молодого специалиста - не переходи на личности ) - это удел быдла и плебеев.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
что ты этим хочешь сказать?
если тебя не устраивает этот форум, и у тебя есть альтернативы, надо просто восползоватся ими. Я не вижу, что бы тебя тут пытались удерживать насильно.
А набивать себе цену, играя в оскорбленного потребителя - смысл?
 

domino

Новичок
2 флопик: ты несёшь ахинею ) к тому же оффтопик. я не буду это комментить.
 

AmdY

Пью пиво
Команда форума
у тебя есть альтернативы
может ты рассмотришь альтернативы не только для решения, но и для цели?
зачем передавать объекты, которые не должны менять состояние. это не логично, не поддерживается языком, значит у тебя нелогичная цель. возможно, действительно, у тебя супер идея, но опыт подсказывает, что шанс на то, что большинство желаний легко вписывается в стандартные шаблоны проектирования.
 

domino

Новичок
при чём тут шаблоны проектирования? ) поведение объектов должно моделировать поведение объектов реального мира. с этого начинается вообще идея ооп. в моей задаче это так. если ты не видишь в этом логики, ну что ж.. в конце концов, ты не в моей команде ) и видеть её необязан. но утверждение, что раз что-то не поддерживается языком, значит это нелогично - это глупое утверждение. пхп3 много чего не поддерживал. пхп4 тоже. а вот пхп5 поддерживает деприкейтед интерфейсы ) продолжать я не буду, да? )) это оффтопик в общем, модераторы могут спокойно закрывать этот топик, я думаю. но если ты оч. хочешь узнать, зачем передавать объекты, которые не должны менять состояния, то подумай вот над чем - зачем нужен аттрибут рид онли в любой файловой системе? что, это очень космическая цель? зачем в пхп существуют константы? нафиг кому-то ячейка памяти, которую нельзя изменить? странно, да? ))) куда лучше взять топор и рубить и менять, чтоб щепки летели и лицо светилось от счастья ))
 

Lightning

Трудоголик
возможно, действительно, у тебя супер идея, но опыт подсказывает, что шанс на то, что большинство желаний легко вписывается в стандартные шаблоны проектирования.
Думать нужно всегда, а не пытаться притягивать за уши паттерны проектирования. Именно по этой причине, многие опытные разработчики считают, что паттерны - зло.
Кстати, ты уверен, что нету похожего паттерна?
поведение объектов должно моделировать поведение объектов реального мира.
Не обязательно.
с этого начинается вообще идея ооп.
Не совсем. Это одна из идей.
 

domino

Новичок
2 Lightning: как же не уверен? )) вот пул объектов - это и есть один из паттернов ) но большинство паттернов сами по себе мало на что пригодны. например, тот же пул. в рамках паттернов - это просто массив, каждым элементом которого является объект. это выражает какую-то общую идею, а как эта идея будет развита в конкретной архитектуре - это уже дело десятое. на счёт того, что паттерны - это зло, ну я так не думаю ) просто, если решение оправдывает применение паттерна, почему бы нет? а если решение будет с паттерном выглядеть неуклюже - то и юзать его не надо ) паттерны - это же не цель ) от количества заюзанных паттернов прога круче не становится. с другой стороны, паттерны и собираются как варианты распространённых решений.
 

AmdY

Пью пиво
Команда форума
не хочешь чтобы программист мог изменить объект, не давай ему этот объект, предоставь апи для извлечения данных ли запуска методов
Думаю, здесь нужен Facade, который предоставляет доступ к свойствам и методам другим эллементов системы с которыми не хочется работать на прямую.
 
Сверху