До меня нифига не доходит. Только не трудитесь объяснять как он работает и для чего он нужен. Это я знаю. Мне нужна ситуация, где он действительно на своем месте, то есть используется рационально.
Спустя 33 минуты, 59 секунд (1.10.2012 - 09:12) sharki написал(а):
twin
Ну например для БД, если ты захотел намутить актив рекорд паттерн для БД, или архитектуры приложения. Там например удобно создавать динамически поля, а потом их перебирать и строить какую нибудь штукенцию. И вот когда вызывается этот магический метод, там можно фиксировать состояние приложения, например ты добавил поле "окно", и тут сеттер понимает, что твое окно принадлежит другому экземпляру классу, и надо что-то сделать с этим классом, может получить доп данные по классу, и присвоить какие то состояния.
Ну например для БД, если ты захотел намутить актив рекорд паттерн для БД, или архитектуры приложения. Там например удобно создавать динамически поля, а потом их перебирать и строить какую нибудь штукенцию. И вот когда вызывается этот магический метод, там можно фиксировать состояние приложения, например ты добавил поле "окно", и тут сеттер понимает, что твое окно принадлежит другому экземпляру классу, и надо что-то сделать с этим классом, может получить доп данные по классу, и присвоить какие то состояния.
Спустя 4 минуты, 29 секунд (1.10.2012 - 09:16) twin написал(а):
Ну это не рационально. ИМХО. Начиная с этого места:
Цитата |
если ты захотел намутить актив рекорд паттерн для БД |
А вот про окно нифига не понял. Примерчик кода небольшенький мог бы написать?
Спустя 12 минут, 33 секунды (1.10.2012 - 09:29) sharki написал(а):
Цитата |
Ну это не рационально |
Ну тут можно поспорить, конечно код становится немного неконтроллируемым, зато получается некий конструктор, где ядро само все учитывает, куда что добавить. ну вот например что можно заменить только одним маг. методом.
$bla->myTask = new BlaTaskFromWork("Новая задача");
и больше ничего делать не надо, а BlaTaskFromWork наследуется от единого интерфейса, где описаны такие методы типа getInfo(), getUserInfo(), getDate() и т.д...и реализация твоего магического метода
.... __set($name,$value){
$this->collectionTask->add($value->getInfo(),$value->getDate());
}
Сам думаешь к какому семейству классов данный класс пренадлежит и т.д, че с ним сделать. И не давать об этом думать пользователю (программисту, кто будет использовать твой класс для своих нужд)
короче че угодно можно придумать, и структуризовать...
Цитата |
Примерчик кода небольшенький мог бы написать |
Ну вот же на википедии есть, а так смысл ясен из этих строк
part = new Part()
part.name = "Sample part"
part.price = 123.45
part.save()
Есть у нас описание таблиц БД, например есть класс таблица part, ты её описываешь классом (модель данных) Part, в нем поля и бла бла все нужные для удобной работы с таблицей. В итоге что мы имеем, берем создаем родительский класс например DataDb в нем есть несколько методов, например save, delete и т.д... Потом когда мы присваиваем новые поля или что еще хуже, при вызове метода save, метод перебирает все функции, св-ва и другое, и делает какую то логику, сохраняет в БД например, очень удобно. Глянь в сторону Doctrine
Спустя 49 минут, 12 секунд (1.10.2012 - 10:18) twin написал(а):
Спорить действительно не нужно))) Во-первых я написал ИМХО, а во вторых конструктор на боевом сайте... Какая же это рационализация. Конструктор хорош для конструирования. На то он и. А для работы лучше использовать обкатанную модель, где нет ничего лишнего.
За разъяснение большое спасибо. Только к сожалению я не этого хотел(((
Я имел ввиду вот что. Есть цикл do...while Он используется крайне редко, хотя Попов его умудрился засунуть в каждый свой сайт по нескольку раз. Однако есть такие моменты, где без этого цикла действительно сложно. Допустим преобразование целого числа в строковую запись. Там он на своем месте.
Так же и тут. Придумать применение этому методу особого труда не составляет. Я просто не могу найти тот самый случай, когда его применение не притянуто за уши изобретением универсальных конструкторов, а обосновано рациональным применением на боевом сайте.
За разъяснение большое спасибо. Только к сожалению я не этого хотел(((
Я имел ввиду вот что. Есть цикл do...while Он используется крайне редко, хотя Попов его умудрился засунуть в каждый свой сайт по нескольку раз. Однако есть такие моменты, где без этого цикла действительно сложно. Допустим преобразование целого числа в строковую запись. Там он на своем месте.
Так же и тут. Придумать применение этому методу особого труда не составляет. Я просто не могу найти тот самый случай, когда его применение не притянуто за уши изобретением универсальных конструкторов, а обосновано рациональным применением на боевом сайте.
Спустя 7 минут, 2 секунды (1.10.2012 - 10:25) sharki написал(а):
Ну раз такое дело, то думаю вообще стоит забыть про это, т.к если сразу не видно зачем он нужен, то и не нужен вовсе. Вдруг в будущем мысль озарит, и применишь сеттер)
Спустя 10 минут, 25 секунд (1.10.2012 - 10:36) TMake написал(а):
twin
С моей точки зрения он уместен в базовом классе приложения, например для переопределения конфиг значения.
А вообще в доках где то видел, что бы жесткой привязки к свойствам классе не производилось ввели сеттеры, таким образом при необходимости мы можем изменить значение свойства и изменить сеттер под новую структуру класса и надобность изменять другие классы под измененный класс отпадает.
С моей точки зрения он уместен в базовом классе приложения, например для переопределения конфиг значения.
А вообще в доках где то видел, что бы жесткой привязки к свойствам классе не производилось ввели сеттеры, таким образом при необходимости мы можем изменить значение свойства и изменить сеттер под новую структуру класса и надобность изменять другие классы под измененный класс отпадает.
Спустя 9 минут, 30 секунд (1.10.2012 - 10:45) twin написал(а):
sharki
В том и дело... Вот столкнулся я в одном месте с такой штукой (упрощенно):
Вот и задумался, а где можно применить его рационально. Так, что бы вопросы о применении не возникали.
В том и дело... Вот столкнулся я в одном месте с такой штукой (упрощенно):
public function __set($name, $value)Ну ясно, инкапсуляция. Не дать сунуть в объект лишнее свойство. Фильтр вроде как. Благое намерение, но только если не доверяешь разработчику. Это не рационально.
{
if(in_array($name, $this->properties))
$this->$name = $value;
else
exit('property '. $name .' is not defined');
}
Вот и задумался, а где можно применить его рационально. Так, что бы вопросы о применении не возникали.
Цитата |
Ну раз такое дело, то думаю вообще стоит забыть про это, т.к если сразу не видно зачем он нужен, то и не нужен вовсе. Вдруг в будущем мысль озарит, и применишь сеттер) |
Да в том и дело, что озарило наоборот... Не видно ни сразу, ни после некоторых раздумий. Думал, что опытные ООПэшники подскажут. Ведь должен быть такой вариант. Хоть один, для примера...
stepan
stepan
Цитата |
А вообще в доках где то видел, что бы жесткой привязки к свойствам классе не производилось ввели сеттеры, таким образом при необходимости мы можем изменить значение свойства и изменить сеттер под новую структуру класса и надобность изменять другие классы под измененный класс отпадает. |
Переопределить свойства можно и без сеттера, на сколько мне известно. Тут дело в другом. Тут нужно такое действие в сеттере, до определения свойства, что бы при попытке обратиться к несуществующему свойству, что-либо произошло.
Чую, что есть простой пример, не могу придумать.
Чую, что есть простой пример, не могу придумать.
Спустя 10 минут, 29 секунд (1.10.2012 - 10:56) TMake написал(а):
Цитата (twin @ 1.10.2012 - 11:45) |
Переопределить свойства можно и без сеттера, на сколько мне известно. |
Это если оно public, я же имел введу private или protected
Цитата (twin @ 1.10.2012 - 11:45) |
при попытке обратиться к несуществующему свойству, что-либо произошло. |
Это еще одна из возможностей
Спустя 9 минут, 55 секунд (1.10.2012 - 11:06) twin написал(а):
stepan
Цитата |
Это если оно public, я же имел введу private или protected |
На кой его делать приватным, а потом изменять извратным способом... Опять нерационально.
Цитата |
Это еще одна из возможностей |
Да! Вот только какая конкретно, я и интересуюсь...
Спустя 32 минуты, 46 секунд (1.10.2012 - 11:38) TMake написал(а):
Цитата (twin @ 1.10.2012 - 12:06) |
На кой его делать приватным, а потом изменять извратным способом |
Задумка доступа была ведь не спроста введена - каждому программисту дает возможность вводить свои правила в определенные классы.
А по поводу сеттера более похожи на мини кастыль который позволяет обойти излишество в исправлениях.
Цитата (twin @ 1.10.2012 - 12:06) |
Да! Вот только какая конкретно, я и интересуюсь... |
Не мне тебе это рассказывать, но каждый сам себе творец

Спустя 2 часа, 3 минуты, 26 секунд (1.10.2012 - 13:42) Guest написал(а):
Если объект имеет динамическую структуру, то есть изменяемое число свойств , при чём в разных контекстах разное число (пример тому динамический массив, но объект требует в себе какие то валидации этих свойств, алгоритмы преобразований, тогда рационально и оправданно использовать объект, а не массив).
Пример тому может быть динамический объект транзакции или ещё лучше динамический объект трансфера данных (Data Transfer Object) между какими то "слоями" в программе. Например между слоем представления->слой бизнес логики->слой БД->шлюз БД (сама запись в БД). На каждом уровне добавляется свои свойства и в определённых условиях разный набор. Это конечно не особенно читаемо, но удобно когда нужен "сквозной" объект данных.
Но лучше всего это удобство видно в объекте передачи данных по сети, при чём стандартизируются обе стороны. Слой представления->слой бизнес логики->слой БД-> и передача в компонент по отправке данных на удалённый узел. Возможно Вы скажете что по сети лучше передавать строковые данные (это конечно спорный вопрос), но никто не мешает преобразовывать объект в строку
То есть в результате мы имеем перемещаемый контекст данных, при чём с динамической структурой. Писать bean методы для всех знаемых и не знаемых свойств нет нужды в этом.
Хорошо реализован в RUBY такой доступ.
Пример тому может быть динамический объект транзакции или ещё лучше динамический объект трансфера данных (Data Transfer Object) между какими то "слоями" в программе. Например между слоем представления->слой бизнес логики->слой БД->шлюз БД (сама запись в БД). На каждом уровне добавляется свои свойства и в определённых условиях разный набор. Это конечно не особенно читаемо, но удобно когда нужен "сквозной" объект данных.
Но лучше всего это удобство видно в объекте передачи данных по сети, при чём стандартизируются обе стороны. Слой представления->слой бизнес логики->слой БД-> и передача в компонент по отправке данных на удалённый узел. Возможно Вы скажете что по сети лучше передавать строковые данные (это конечно спорный вопрос), но никто не мешает преобразовывать объект в строку

То есть в результате мы имеем перемещаемый контекст данных, при чём с динамической структурой. Писать bean методы для всех знаемых и не знаемых свойств нет нужды в этом.
Хорошо реализован в RUBY такой доступ.
Спустя 1 минута, 59 секунд (1.10.2012 - 13:44) Guest написал(а):
А ведь объекты могут иметь довольно внушительный объём информации в себе. И для каждого свойства писать bean метод будет ужасом 
Кстати такие объекты могут храниться как кэши в ОП, при чём с динамикой изменения.

Кстати такие объекты могут храниться как кэши в ОП, при чём с динамикой изменения.
Спустя 5 минут, 26 секунд (1.10.2012 - 13:49) Guest написал(а):
Цитата |
Возможно Вы скажете что по сети лучше передавать строковые данные (это конечно спорный вопрос), но никто не мешает преобразовывать объект в строку |
В смысле здесь я хотел показать что возможно передавать данные в виде какого то стандарта своего или сериализованным объектом. Иногда сериализованный объект выигрывает особенно в удобстве обслуживания на обеих сторонах.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.
Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
