Цитата (twin @ 9.10.2013 - 05:56) |
Вот человек написал честно. И не дилетант какой-нибудь. |
Цитата (twin @ 9.10.2013 - 08:49) |
Сказал А, говори Б. Что по твоему есть инкапсуляция? Объясни, а то ты как то странно смотришься с вызванной улыбкой и отсутствием аргументов... |
class ExampleСейчас сколь угодно долго можно рассуждать на тему закономерности такого демарша, но язык дает возможность обратиться даже к приватному свойству извне класса, а значит на лицо нарушение принципа:
{
public function __set($name, $value)
{
$this->$name = $value;
}
public function __get($name)
{
return $this->$name;
}
}
Цитата |
Инкапсуляция — механизм языка программирования, ограничивающий доступ к составляющим объект компонентам (методам и свойствам), делает их приватными, то есть доступными только внутри объекта. Важно понимать, что к инкапсулированной переменной можно обратиться при написании реализации класса, но при его использовании обращение к ней невозможно. |
Цитата (twin @ 9.10.2013 - 09:58) |
Я встречал людей, которые вполне серьёзно считают, что обращаться к свойствам классов можно только через сеттеры и геттеры и никак иначе. |
Цитата (kaww @ 9.10.2013 - 10:15) |
да, язык позволяет "нарушать", но выбор остается в итоге за разработчиком, как он реализует эти методы. |
Цитата (twin @ 9.10.2013 - 09:58) | ||
Я встречал людей, которые вполне серьёзно считают, что обращаться к свойствам классов можно только через сеттеры и геттеры и никак иначе. Причем именно через вот такую конструкцию:class ExampleСейчас сколь угодно долго можно рассуждать на тему закономерности такого демарша, но язык дает возможность обратиться даже к приватному свойству извне класса, а значит на лицо нарушение принципа:
Я не вижу поводов улыбаться... |
Цитата (sergeiss) |
Банально, просто? |
Цитата (Guest @ 9.10.2013 - 15:08) |
так что какое еще одно никому неизвестное назначение... |
Цитата (glock18 @ 9.10.2013 - 10:56) |
__get и __set не дают прямого доступа к членам класса, а это по сути те методы, через которые инкапсуляция производится. |
class Example
{
private $var = 'Я - приватное свойство!';
public function __get($name)
{
return $this->$name;
}
}
$obj = new Example();
// Откуда мне знать, что свойство приватно?
echo $obj->var;
Цитата |
Очень жаль, что не видишь поводов для улыбки. Первый раз это улыбку вызывает, а потом уже и не смешно вовсе. Возникает ощущение, что это ты и писал ту статью на хабре. |
Цитата (twin @ 9.10.2013 - 11:47) | ||||
Вот именно, что в той реализации дают. И именно прямой. Мне совершенно не видно, каким образом это реализовано в классе, у меня же только интерфейс. А он как раз и позволяет:
Нет, не я автор. Но со многим согласен. А поводов для улыбки не вижу, потому что ты не вник в суть. Перечитай еще раз, что автор имел ввиду. Инкапсуляция - помещение в капсулу. Тоесть изоляция, сокрытие. А тут сама реализация парадигмы в PHP в частности делает в этой капсуле дырку размером с мамонта. А автор статьи про другие языки пишет. Я к чему првел эту статью. А к тому, что говорить о постулатах ООП можно только с ремаркой ИМХО, так как людей, реально знающих предмет единицы, если вообще такие существуют. А у всех просто частные реализации парадигмы, в которой то и четких определений то нет. От того и холивары постоянно. У всех своя истина. Вот MiksIr сказал, что наследование, это не прикручивание кошке хвоста. И он по своему прав, и я уверен, что может сослаться на какие-то пруфы и авторитетов. Однако парадигма позволяет приделать кошке два хвоста и он не имеет права заявлять, что эхто неверно и нарушение архитектуры. Потому что это нарушает его архитектуру и его представление об ООП. Ровно как и не уместна твоя улыбка по поводу инкапсуляции. |