Здравствуйте, у меня такой вопрос: в классе есть public свойства, я хочу сделать так, что-бы пользователь мог только брать значение, но не мог менять свойство. Я пробовал решить проблему 2я методами 1: PHP: public function __set($name, $value) { die('свойства нельзя изменять'); } 2: PHP: protected function __set($name, $value) { // свойства нельзя изменять } но это не работает, можете что-нибудь подсказать?
можно сделать внутреннюю функцию, которая вызывается в других и сверяет значение всех внутренних переменных с эталоном из массива. после работы все функции туда записывают новый эталон, но если пытаются изменить сами а потом вызвать функцию любую - будет драко )
__set не перехватывает обращение к public свойствам. Как вариант сделать все свойства protected и использовать пару __set/__get.
readOnly is private и в конструкторе я заполняю в него названия protected переменных, которые можно прочесть PHP: public function __get($name) { if (in_array($name, $this->readOnly)) { return $this->$name; } }