[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Магия и инкапсуляция
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
twin
Цитата
А раскройте, пожалуйста, кому именно магия дает возможность нарушить инкапсуляцию?

Да ничего она не нарушает, успокойтесь. Нечего нарушать. Я же написал - нет предмета разговора, он пропал еще тогда, когда я написал этот пост.

Ошибка моя была в том, что я считал инкапсуляцию задокументированным принципом, как наследовние. Оказалось, что это просто что-то эфимерное.

Ваш принцип не нарушает. Мой нарушает. Какой из них верный - судить нельзя. Ибо это весьма абстрактное понятие, инкапсуляция. Нет стандарта, значит есть только ИМХО.

glock18
Вась, ты зачем это пишешь? Покрасоваться? Ты не понимаешь, что плюешь в колодец?
Если бы не моя упертость, ты многого бы не узнал интересного. smile.gif

Я бы понял, если бы ты что то конструктивное писал, тебя то я чем обидел?

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

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

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

user posted image
twin
Цитата (MiksIr @ 15.10.2013 - 15:26)
Рефлексия - как раз и есть грязный хак. Рефлексия позволяет нарушить инкапсуляцию _пользователем_ класса. Но рефлексия вообще не имеет отношения к магии, разные механизмы.

А где я писал про то, что рефлексия имеет отношение к магии? Или вы серьёзно считаете, что я не знаю, что это такое?

Если я изучу класс, найду там магический метод, который позволяет мне добраться до приватного свойства, я спокойно нарушу принцип. Ваш принцип. И это мне позволит как раз магия.

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

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

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

user posted image
YVSIK
Свернутый текст
Все смешалось в доме Романовнах/
кони , люди, ......)), кухарки) ;)теперь и программисты добрались


ph34r.gif ph34r.gif
совсем недавно мне моя жена прочитала в одноклассниках цитату,
чем больще претензий у мужчины к женщине тем он слабее как мужчина

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
twin
Цитата (MiksIr @ 15.10.2013 - 16:02)
Цитата
Если я изучу класс, найду там магический метод, который позволяет мне добраться до приватного свойства, я спокойно нарушу принцип. Ваш принцип. И это мне позволит как раз магия.

И причем тут язык? Вы нашли _баг_ созданный _разработчиком класса_ и стали его использовать. Магия виновата, что разработчик сделал баг?

Конечно)))
Вот если бы магия срабатывала на необъявленное свойство, все было бы на своих местах. А она срабатывает на объявленное, но закрытое. Это не логично. Не логично с точки зрения принципов инкапсуляции.

Но, как выяснилось, логики тут и быть не должно. Ибо уровни доступов, область видимости и тем более магия не имеют отношения к инкапсуляции. Вернее имеют, как перегонный куб к самогону. Нравится вам называть его самогонным аппаратом - не смею препятствовать.

По мне так инкапсуляция, это невозможность обращения. Ошибку я жду. А её нет. Значит и инкапсуляции нет. Но разрабы языка не при чем. Им эта инкапсуляция по барабану. Тем более в моей трактовке.

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

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

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

user posted image
glock18
Цитата (twin @ 15.10.2013 - 15:42)
Цитата
А раскройте, пожалуйста, кому именно магия дает возможность нарушить инкапсуляцию?

Да ничего она не нарушает, успокойтесь. Нечего нарушать. Я же написал - нет предмета разговора, он пропал еще тогда, когда я написал этот пост.

Ошибка моя была в том, что я считал инкапсуляцию задокументированным принципом, как наследовние. Оказалось, что это просто что-то эфимерное.

Ваш принцип не нарушает. Мой нарушает. Какой из них верный - судить нельзя. Ибо это весьма абстрактное понятие, инкапсуляция. Нет стандарта, значит есть только ИМХО.

glock18
Вась, ты зачем это пишешь? Покрасоваться? Ты не понимаешь, что плюешь в колодец?
Если бы не моя упертость, ты многого бы не узнал интересного. smile.gif

Я бы понял, если бы ты что то конструктивное писал, тебя то я чем обидел?

Ты о чем вообще? Что я интересного узнал "благодаря" твоей упертости? Конструктивное пробовал писать, но толку не было, как это уже видно по этому топику. 200+ сообщений, и ноль прогресса. Ты то, конечно, уверен, что прогресс есть, ведь ты думаешь, что понял то-то и то-то.

На деле этого не видно. Покуда для тебя есть разница между __get/__set для свойства some и getSome/setSome в отношении инкапсуляции, это только лишь свидетельствует о непонимании предмета.

Хороший пример привел MiksIr с calculated1 и calculated2, - можно предположить, что поле int лучше запретить для доступа через обычные геттер и сеттер, тем не менее, возможно, что так и задумано программистом. Так или иначе, он установил такие правила инкапсуляции, по которым поле int можно прочитать (не пересчитывая)/изменить. Абсолютно то же самое было бы, если бы автор объявил публичные setInt() и/или getInt() - магические методы тут сами по себе ни при чем.

twin
glock18
Цитата
Ты о чем вообще? Что я интересного узнал "благодаря" твоей упертости?
Я не только про эту тему.
А в этой теме ты сам писал, что не во всех версиях PHP магия работает так. Если бы ты знал, как он устроена, не писал бы такого. Теперь знаешь.

А прогресс какой тебе нужен? Что бы я признал все безоговорочно? Примеры хорошие, я не спорил. Но причем тут прогресс, я его принципов и не отрицал. Ты не понял, что моё видение инкапсуляции просто немного жестче, оно дополняет, а не отрицает тех принципов. Если MiksIr допускает обращение к приватным свойствам, пусть через магию, пусть через сахарозу, не суть, то я считал, что этого допускать нельзя. Ведь ты же сам давал ссылку на вики, а там четко написано - обращение невозможно.

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

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

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

user posted image
glock18
Цитата (twin @ 15.10.2013 - 16:15)
По мне так инкапсуляция, это невозможность обращения. Ошибку я жду. А её нет. Значит и инкапсуляции нет. Но разрабы языка не при чем. Им эта инкапсуляция по барабану. Тем более в моей трактовке.


Специально для тебя элементарный пример обертки над массивом:


class myClass {
protected $items = array();

public function __set($name, $value)
{
$this->items[$name] = $value;
}

public function __get($name)
{
return isset($this->items[$name]) ? $this->items[$name] : null;
}
}


$obj = new myClass();
$obj->myitem1 = 1;
$obj->myitem2 = 2;
$obj->myitem3 = 3;
$obj->items = 'bang';


С какого перепуга я должен получать еррор при попытке добавить элемент items в контейнер?
Guest
/**
*
@property $foo
*
@property $bar
*/

class A {
private $foo;
private $bar;
private $int;

public function __get($name) {
return $this->$name;
}

public function __set($name, $value) {
$this->$name = $value;
}

public function getCalculated1() {
return $this->internalCalculate();
}

public function getCalculated2() {
return $this->int;
}

private function internalCalculate() {
return $this->int = $this->foo * $this->bar;
}
}


$a = new A();
$a->foo = 'Я хрень и твой метод internalCalculate сейчас сделает фатал';
$a->bar = NULL;

$result = $a->getCalculated1(); // Бздыщь


Вот и инкапсулировали.
А такие мансы сплош и рядом случаются, неподконтрольное изменение.
Только не нужно говорить что можно проверку в магическом методе сделать, это уже костыль, а не логика.
Быстрый ответ:

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