[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Магия и инкапсуляция
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
glock18
Цитата (twin @ 13.10.2013 - 08:30)
glock18
Так а весь сыр-бор и начался из-за  коныка в вкууме. У тебя же вызвала улыбку сферическая статья на хабре. Где ты же и не понял, о чем речь, что и подхватил Серёга. Речь там как раз и шла о нарушении принципов инкапсуляции, заложенной в саму парадигму. Не о вреде инкапсуляции, а о том, что эти принципы соблюдаются далеко не свято и не могут считаться одним из китов ООП.

Гость_Alan
Цитата
Но PHP и есть промежуточный язык, не до конца принявший парадигму ООП.
В той статье кстати ни слова про PHP не было.

Я понял все. Кажется, должно по последнему сообщению понятно быть. getProperty() с доступом по всем свойствам ничуть не лучше, и все так же дает доступ ко всем свойствам, давая все тот же низний уровень инкапсуляции. В данном примере badpractice само тело метода, а не его название.
twin
glock18
Да не спорю я. Тут важна не реализация метода, а принцип обращения к свойствам.

Не нравится обращение сразу ко всем, можно делать для каждого. Не нравится так, я раньше давал ссылку на перегрузку свойств с помощью __call(). Еще круче. Но важно то, что обращаться нужно не к приватному свойству, а к публичному методу. И это должно быть явно видно в интерфейсе. Дабы небыло кривотолков.

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

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

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

user posted image
twin
MiksIr
Сказал, как отрезал. Куда уж нам, непонятливым.
То же самое, что Сережа говорил, только более завуалированно.

А зачем тогда определять свойство приватным, если оно снаружи по вашему рассуждению все равно публично? Оно для того и защищается, чтобы из интерфейса к нему не лезли. И никак его не должен обслуживать магический метод, ибо сказано в писании:
Цитата
которые не были объявлены или не видны в текущей области видимости.
Это свойство объявлено. Значит руки прочь от него. И нечего сочинять.

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

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

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

user posted image
Гость_Alan
twin
Цитата
А зачем тогда определять свойство приватным, если оно снаружи по вашему рассуждению все равно публично?

Если сеттера нет, то оправдано.
Закрыто от изменения из вне. Это одна из самых важных причин почему сделано не видимым в области внешней.
twin
MiksIr
Вона чё. Так вы говорите о том, что есть, а я о том, что должно быть по логике вещей.
Есть определение инкапсуляции, в сотый раз пережевываем. Если свойство объявлено приватным, обращение к нему невозможно. Вы говорите, что свойство снаружи не имеет отношения к свойству внутри. Ладно. А если объявить его публичным, какого фига не срабатывает магия? Ведь это разные свойства. Должна сработать по вашей логике, ан нет.

Гость_Alan
Так а я про что?

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

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

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

user posted image
ZSH
Цитата
Если сеттера нет, то оправдано.

Вот именно, и даже если есть сеттер, то не факт что вы получите доступ к этому свойству. Зависит от реализации этого самого сеттера.

Цитата
А зачем тогда определять свойство приватным, если оно снаружи по вашему рассуждению все равно публично?

С таким подходом и доступ через $obj->getName(), тоже можно расценивать как нарушение принципов инкапсуляции, что естественно не так.
twin
Цитата (ZSH @ 13.10.2013 - 09:15)
С таким подходом и доступ через $obj->getName(), тоже можно расценивать как нарушение принципов инкапсуляции, что естественно не так.

Нельзя. Метод публичный, никакого диссонанса. А он имеет право внутри класса делать что хочет.

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

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

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

user posted image
ZSH
Цитата
Нельзя. Метод публичный, никакого диссонанса. А он имеет право внутри класса делать что хочет.

так и сеттер, геттер тоже публичные
twin
Цитата
Просто запомните - то, что не публичное - для вас не существует. Вообще. Вы вообще не знаете, какие там приватные свойства, как зовутся и т.п. А раз не знаете - не можете утверждать, что обращаетесь к приватному свойству.

Вот это и как раз камень преткновения. Это как раз и не логично. Если нет магических методов, на приватное свойство интерпретатор выкидывает ошибку
Цитата
Cannot access private property
а вовсе не
Цитата
Undefined property
Значит все-таки он его видит, но доступа не дает. А магию зачем то включает.

Потому и плохо это все, не должно быть так.


ZSH
Цитата
так и сеттер, геттер тоже публичные
Но обращаемся мы сначала к свойству. А оно приватно.

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

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

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

user posted image
ZSH
Цитата
Но обращаемся мы сначала к свойству. А оно приватно.

Все верно, и в зависимости от реализации сеттера, геттера получите результат.
А как вы реализуете метод, это уже ваша забота. Можете дать доступ, или запретить, или ошибку сгенерировать...
Цитата

А он имеет право внутри класса делать что хочет.
Быстрый ответ:

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