glock18
13.10.2013 - 12:36
Цитата (twin @ 13.10.2013 - 08:30) |
glock18 Так а весь сыр-бор и начался из-за коныка в вкууме. У тебя же вызвала улыбку сферическая статья на хабре. Где ты же и не понял, о чем речь, что и подхватил Серёга. Речь там как раз и шла о нарушении принципов инкапсуляции, заложенной в саму парадигму. Не о вреде инкапсуляции, а о том, что эти принципы соблюдаются далеко не свято и не могут считаться одним из китов ООП.
Гость_Alan
Цитата | Но PHP и есть промежуточный язык, не до конца принявший парадигму ООП. |
В той статье кстати ни слова про PHP не было. |
Я понял все. Кажется, должно по последнему сообщению понятно быть. getProperty() с доступом по всем свойствам ничуть не лучше, и все так же дает доступ ко всем свойствам, давая все тот же низний уровень инкапсуляции. В данном примере badpractice само тело метода, а не его название.
glock18Да не спорю я. Тут важна не реализация метода, а принцип обращения к свойствам.
Не нравится обращение сразу ко всем, можно делать для каждого. Не нравится так, я раньше давал ссылку на перегрузку свойств с помощью __call(). Еще круче. Но важно то, что обращаться нужно не к приватному свойству, а к публичному методу. И это должно быть явно видно в интерфейсе. Дабы небыло кривотолков.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
MiksIr
Сказал, как отрезал. Куда уж нам, непонятливым.
То же самое, что Сережа говорил, только более завуалированно.
А зачем тогда определять свойство приватным, если оно снаружи по вашему рассуждению все равно публично? Оно для того и защищается, чтобы из интерфейса к нему не лезли. И никак его не должен обслуживать магический метод, ибо сказано в писании:
Цитата |
которые не были объявлены или не видны в текущей области видимости. |
Это свойство объявлено. Значит руки прочь от него. И нечего сочинять.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Гость_Alan
13.10.2013 - 13:08
twin
Цитата |
А зачем тогда определять свойство приватным, если оно снаружи по вашему рассуждению все равно публично? |
Если сеттера нет, то оправдано.
Закрыто от изменения из вне. Это одна из самых важных причин почему сделано не видимым в области внешней.
MiksIrВона чё. Так вы говорите о том, что есть, а я о том, что должно быть по логике вещей.
Есть определение инкапсуляции, в сотый раз пережевываем. Если свойство объявлено приватным, обращение к нему невозможно. Вы говорите, что свойство снаружи не имеет отношения к свойству внутри. Ладно. А если объявить его публичным, какого фига не срабатывает магия? Ведь это разные свойства. Должна сработать по вашей логике, ан нет.
Гость_AlanТак а я про что?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата |
Если сеттера нет, то оправдано. |
Вот именно, и даже если есть сеттер, то не факт что вы получите доступ к этому свойству. Зависит от реализации этого самого сеттера.
Цитата |
А зачем тогда определять свойство приватным, если оно снаружи по вашему рассуждению все равно публично? |
С таким подходом и доступ через $obj->getName(), тоже можно расценивать как нарушение принципов инкапсуляции, что естественно не так.
Цитата (ZSH @ 13.10.2013 - 09:15) |
С таким подходом и доступ через $obj->getName(), тоже можно расценивать как нарушение принципов инкапсуляции, что естественно не так. |
Нельзя. Метод публичный, никакого диссонанса. А он имеет право внутри класса делать что хочет.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата |
Нельзя. Метод публичный, никакого диссонанса. А он имеет право внутри класса делать что хочет. |
так и сеттер, геттер тоже публичные
Цитата |
Просто запомните - то, что не публичное - для вас не существует. Вообще. Вы вообще не знаете, какие там приватные свойства, как зовутся и т.п. А раз не знаете - не можете утверждать, что обращаетесь к приватному свойству. |
Вот это и как раз камень преткновения. Это как раз и не логично. Если нет магических методов, на приватное свойство интерпретатор выкидывает ошибку
Цитата |
Cannot access private property |
а вовсе не
Цитата |
Undefined property |
Значит все-таки он его видит, но доступа не дает. А магию зачем то включает.
Потому и плохо это все, не должно быть так.
ZSH
Цитата |
так и сеттер, геттер тоже публичные |
Но обращаемся мы сначала к свойству. А оно приватно.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата |
Но обращаемся мы сначала к свойству. А оно приватно. |
Все верно, и в зависимости от реализации сеттера, геттера получите результат.
А как вы реализуете метод, это уже ваша забота. Можете дать доступ, или запретить, или ошибку сгенерировать...
Цитата |
А он имеет право внутри класса делать что хочет.
|
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.