[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Магия и инкапсуляция
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
ZSH
public function __get($name)
{
return $this->$name;
}

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

если и есть магические гетеры и сетеры, то это не значит что их так надо применять

а может там :
public function __get($name)
{
return 'Кыш отсюда!';
}


тем более:
Мне совершенно не видно, каким образом это реализовано в классе, у меня же только интерфейс
sergeiss
Цитата (ZSH @ 9.10.2013 - 17:38)
вот хотелось бы увидеть это в реальном рабочем коде, руки бы поотрывал

А если там еще код будет, перед return, тоже будешь руки отрывать? wink.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
ZSH
Имел ввиду конкретную реализацию метода __get, в классе где есть скрытые свойства.
Для того они и придуманы(__get, __set), чтоб обработать доступ к защищенным свойствам, а не записать и получить как везде в поясняющих примерах показано.
sergeiss
Николай, твои рассуждения еще раз подтверждают, что ты так им не понял ни мои слова, ни саму инкапсуляцию (давай на ней сосредоточимся, дабы не распыляться).
Так вот. Ты утверждаешь:
Цитата (twin @ 13.10.2013 - 08:46)
Вот представь, ты открываешь документацию, а в ней черным по белому - свойство $var - приватно. А в коде видишь прямое к нему обращение. Это не вызовет разрыв шаблона. как ты выражаешься?

Если есть прямое обращение - то это не приватное свойство. Просто по определению :) Обращение к свойству через функцию - это не прямое обращение, а "обращение через функцию", сорри за тафтологию. Если свойство приватное, то класс имеет право предоставить доступ к этому свойству через специальный "магический" метод. Имеет право - но не обязан.
И если программер сделал так, что при таком обращении у него там что-то рушится внутри класса... То это не проблемы инкапсуляции, это проблемы кривых рук программера :)

И вообще. С чего ты решил, что ты получаешь доступ к приватному свойству? Ты имеешь доступ к методу, который сам решает, что тебе ответить. Это ТЫ ДУМАЕШЬ, что получил величину этого приватного свойства. Да, чёрт побери, прочитай хотя бы разок хэлп!!! Вот здесь: http://www.php.net/manual/en/language.oop5....php#object.set

Сам магический метод
    public function __get($name)
{
echo "Getting '$name'\n";
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}

$trace = debug_backtrace();
trigger_error(
'Undefined property via __get(): ' . $name .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}

и вызов этого метода:

$obj = new PropertyTest;

$obj->a = 1;
echo $obj->a . "\n\n";

Вот я вижу тут ответ функции, а ты видишь прямое обращение к свойству... А я вот как ни искал, не нашел прямого обращения к свойству извне класса. Ну нету его!!! Если написано $obj->a, то это ну никак не прямое обращение, несмотря на визуальную схожесть с таковым. Более того - приватного свойства $a у данного класса нет вообще...................

У меня, вообще, очень стойкое ощущение того, что ты всё понимаешь также, как я описываю, а просто "троллишь". Чтобы народ высказывался. И этот вариант меня больше устраивает, чем непонимание тобой основы основ языка :)

PS. И еще раз про это:
Цитата (twin @ 13.10.2013 - 08:46)
Вот представь, ты открываешь документацию, а в ней черным по белому - свойство $var - приватно. А в коде видишь прямое к нему обращение. Это не вызовет разрыв шаблона, как ты выражаешься?

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

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

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