[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Магия и инкапсуляция
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
twin
Цитата (glock18 @ 15.10.2013 - 17:41)
Цитата (MiksIr @ 15.10.2013 - 17:28)
А не расскажете - зачем пользователю класса нужно точно знать - он обратился к несуществующему или закрытому свойству?


Барабанная дробь

Вася флудер))) В своем репертуаре. Молодежь... biggrin.gif

Зачем то нужно. Не стану объяснять, ибо сейчас опять посыпятся обвинения в отсталости и некомпитентности.

В общих чертах. Я не пользуюсь ООП в классическом виде, это не секрет. Я использую его частично. И в процессе разработки мне это бывет полезным.

Да собственно это не столь вжно, важно другое. Это все равно костылищще. Меня вообще напрягают эксепшены, а тем более, когда ими рекомендуют заменять штатный интерпретатор.

Да и не в этом суть. Простой вопрос - зачем??? Зачем писать лишний код, когда без него все работает как надо. Я приверженец принципа KISS и меня такие штуки коробят. Когда что то работает не как надо.

То есть ошибка, то нет... Неопределенность - плохо.

Вот я возьму такой класс на рефакторинг, уберу нахрен оттуда магию и захлебнусь в ошибках.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Цитата (MiksIr @ 15.10.2013 - 17:51)
Цитата (glock18 @ 15.10.2013 - 21:41)
Цитата (MiksIr @ 15.10.2013 - 17:28)
А не расскажете - зачем пользователю класса нужно точно знать - он обратился к несуществующему или закрытому свойству?


Барабанная дробь

Заметь, он опять проскипал неудобный ему вопрос wink.gif

Чавоэто? Поссать уже нельзя? biggrin.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Цитата (glock18 @ 15.10.2013 - 17:48)
А почему вообще здесь ошибка должна быть при обращении $obj->a ?

И чем оно по сути отличается от $obj->items в этом примере?

А почему не должна? Как раз потому и должна, что она к магии не имеет отношения.
Делай что хочешь со своим items, какого хрена это моё свойство задевает?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
glock18
Цитата (Гость_Alan @ 15.10.2013 - 17:45)
Ещё одна неимоверная хрень в магии. Возможность сделать свойство в обход архитектуры.
Например: есть у нас AR прослойка к БД, которая должна заведовать только областью сообщения БД и всё.
Что получается, это реальный случай, можно добавить из вне свойство clientManager и оперировать им уже внутри классов, который и знать не должны о существовании таких слоёв.
Получается мы верхний уровень системы(да ещё и отвечающий за работу клиента) опустили в самый низ к БД. Всё. Перевязали архитектуру в обход требуемой. И если методы в AR использующие clientManager очень интенсивно связаны в представлении или в контроллере, рефакторить это пренеприятнейшая вещь.

Самая большая хрень в магии, как и во всем прочем - ее нужно применять уместно. Проблема здесь не в методах __get/__set, а в теле метода самого, дающего доступ ко всем свойствам без разбора. Самое простое, и часто достаточно - использовать отдельное свойство под __get/__set (автоматически решается проблема).

Если дан такой интерфейс - это значит, что разработчик класса решил дать доступ ко всем свойствам. Его проблема. То что у вас там с классом ClientManager проблемы были безусловно не проблема магических методов. То что сигнатуру ->getProperty('clientManager') легче найти было бы в проекте, ну да, конечно. Но по сути - та же самая дыра, позволяющая доступ к любому "приватному" свойству.

Теперь что касается оправданности __get/__set. Приходилось писать под существующий интерфейс? Допустим, всю жизнь использовался какой-нибудь stdClass или какой-нибудь похожий 3rd-party классик для работы с чем-то. Соответственно везде обращение идет по свойствам. Вы создаете новый класс ему на замену, и вполне логично учесть то, как он будет использоваться.

Ситуаций когда они нужны - очень много. То что они могут принести проблемы по причине кривизны рук? Ну да, правда. Так ведь и eval, и exec, и system - все они и еще множество других функций могут принести проблемы, и несоизмеримо бОльшие! Убрать ведь их никто не предлагает, как иначе с ОС общаться, если убрать все функции, которые сейчас есть для этого?
Guest
twin
Цитата
А почему не должна? Как раз потому и должна, что она к магии не имеет отношения.
Делай что хочешь со своим items, какого хрена это моём свойство задевает?


В том примере оно не затронет уже свойство. Вокруг массива будет работа вся в магии.
twin
Цитата (MiksIr @ 15.10.2013 - 18:00)
А я думал, мы тут о теории программирования говорим, а не о том, на каком уровне развития остановился twin,

А зачем был задан такой вопрос? Вы считаете себя в праве говорить за других программистов?
Я не знаю, зачем это нужно другим пользователям. И нужно ли вообще. Я говорю за себя. Причем давно, если вы не заметели. Я говорю о своих принципах и о своем видении. Это вы напялили шапку Мономаха и считаете себя правым во всем априори.



_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Цитата (MiksIr @ 15.10.2013 - 18:07)
Цитата (twin @ 15.10.2013 - 22:05)
Цитата (MiksIr @ 15.10.2013 - 18:00)
А я думал, мы тут о теории программирования говорим, а не о том, на каком уровне развития остановился twin,

А зачем был задан такой вопрос?

Что бы получить ответ: "необходимость определить - свойство закрыто или не существует нужно для таких-то приемов, таких-то решений и т.п."
Но никак не для того, что бы услышать рассказ, что вы не знаете и что вы не умеете.

Так вы не мне его задавайте. Я то тут причем. Задайте его разрабам PHP, они почему то делят эти ошибки. Значит кому то надо.

Вам конечно нет, вы и так все знаете. Только немного то с небес спуститесь на землю. PHP не только для вас разрабатывался.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
glock18
Цитата (twin @ 15.10.2013 - 17:58)
Цитата (glock18 @ 15.10.2013 - 17:48)
А почему вообще здесь ошибка должна быть при обращении $obj->a ?

И чем оно по сути отличается от $obj->items в этом примере?

А почему не должна? Как раз потому и должна, что она к магии не имеет отношения.
Делай что хочешь со своим items, какого хрена это моё свойство задевает?

Продолжаешь только убеждать, что не понимаешь о чем говоришь. С какого перепуга $obj->a будет обращаться к приватному свойству, по-твоему? и $obj->a и $obj->items будут оба обращаться к элементам одного и того свойства-массива items. И никакой ошибки не должно быть там ни при каких обстоятельствах, специально не предусмотренных в самом классе.

$obj->items['a'] и $obj->a - разные вещи, не?
$obj->items['items'] и $obj->items - разные вещи, не?
twin
Цитата (Guest @ 15.10.2013 - 18:02)
twin
Цитата
А почему не должна? Как раз потому и должна, что она к магии не имеет отношения.
Делай что хочешь со своим items, какого хрена это моём свойство задевает?


В том примере оно не затронет уже свойство. Вокруг массива будет работа вся в магии.

Ну как же нет то. Я хочу добавить свойство и не хочу, чтобы кто-то к нему лез. Пусть даже через рефлексию. А там пожалуйста, лезь сколько хочешь, ошибки нет.

Не нужно вопросов, зачем она мне. Просто хочу. Никто не запретит.

Я не требую ничего, я просто говорю, что это с моей точки зрения это не логично. И пусть MiksIr сколь угодно называет моё виденье субъективным, а свое абсолютной истиной, факт есть факт. Нет ошибки. А без магии есть. Нелогично.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.