Krishna
Продался Java
Да, вот такое применение, имхо, уже может быть оправдано, в определенных случаях.Похоже магические методы __get я приберегу для всяких хитрых враперов.
Да, вот такое применение, имхо, уже может быть оправдано, в определенных случаях.Похоже магические методы __get я приберегу для всяких хитрых враперов.
Уф...Попробовал.
$p = new TestClass();
$p->id = 'opa';
var_dump($p);
И что я там должен для себя нового вычитать? Если Вы не в курсе - phpDoc не учитывается во время выполнения, но зато работает в IDE и при документировании кода.Почитайте описание
Т.е. это моя задача понять кашу в чужой голове?Прочтите внимательно первый пост в топике.
ну дык прямо и формулируй: "как обеспечить read-only?"Автор оригинала: Бочонок
сказать как бы вы поступили, если бы вам было необходимо обеспечить доступ к свойствам "только для чтения". Мне интересны только ваши мысли по этому поводу.
За что ему конечно большое спасибо.Krishna
А волшебный метод задуман для более хитрых случаев.
Вот Krishna сбежалgrigori
__get, интерфейс ArrayAccess, но эти средства созданы для других целей
а я бы, с удовольствием послушал мысли - для чего они(магические методы, да и про ArrayAccess тоже будет интересно) созданы.
$obj->property , поэтому магия помогает, если нужен геттер/сеттер - он доопределяется и вызывается неявно, для остальных свойств все остается без изменений.более хитрых случаев.
т.е. идеидля других целей

есть ещё _правильный_ способ, через рефлексию,
?ох и сподвиг ты меня на поиски =)Автор оригинала: Бочонок
2fixxxer:
Я не очень понял, о чем идет речь.
Можно более подробно о возможном наличии архитектурной проблемы?
Ну вот когда действительно не ясно, нафига? Мне вот не понятно, ты вроде как парень смышленный. В моей рецензии это только несколько строк.Автор оригинала: Бочонок
Приятного времени суток.
Столкнулся с задачей реализации read-only свойств в классах.
Сделал просто и понятно:
Но, когда мой код рецензировал некий программист, работающий в Яндекс (за что ему огромное спасибо), он написал:PHP:class testClass{ protected $albumCollection = 'Я могу считать это значение, но не могу записать.'; protected $photoCollection = 'Read only'; public function getAlbumCollection(){ return $this->albumCollection; } public function getPhotoCollection(){ return $this->photoCollection; } }
Ну ... в общем то это не большая проблема. Написал:
А как тогда защитить те свойства, которые не нужно позволять читать? Вот таким вот извращенным методом?PHP:class testClass{ protected $albumCollection = 'Я могу считать это значение, но не могу записать.'; protected $photoCollection = 'Read only'; public function __get($name){ return $this->$name; } }
В общем, я в задумчивости. Подскажите, пожалуйста, как лучше сделать?PHP:class testClass{ private $hidden = array('photoCollection'); protected $albumCollection = 'Я могу считать это значение, но не могу записать.'; protected $photoCollection = 'Read only'; public function __get($name){ if (in_array($name,$hidden)) throw new Exception("А нету!", E_ERROR); return $this->$name; } }
Может быть я что то вообще не то делаю?
С уважением. Боченок.
В моей рецензии это только несколько строк.
программист из Яндекса?