Как реализовать членскую переменную только для чтения в PHP?

При попытке изменить его, выдайте исключение.

10
задан user198729 26 February 2010 в 18:12
поделиться

3 ответа

Я полагаю, что решением для свойств класса было бы:

  • не определять свойство с именем, которое вас интересует
  • использовать магический метод __get для доступа к этому свойству, используя "фальшивое" имя
  • определить метод __set так, чтобы он выбрасывал исключение при попытке установить это свойство.
  • Смотрите Перегрузка, чтобы получить больше информации о магических методах.

Что касается переменных, я не думаю, что возможно иметь переменную, доступную только для чтения, для которой PHP будет выбрасывать исключение при попытке записи в нее.


Например, рассмотрим этот маленький класс :

class MyClass {
    protected $_data = array(
        'myVar' => 'test'
    );

    public function __get($name) {
        if (isset($this->_data[$name])) {
            return $this->_data[$name];
        } else {
            // non-existant property
            // => up to you to decide what to do
        }
    }

    public function __set($name, $value) {
        if ($name === 'myVar') {
            throw new Exception("not allowed : $name");
        } else {
            // => up to you to decide what to do
        }
    }
}

Установив класс и попытавшись прочитать свойство :

$a = new MyClass();
echo $a->myVar . '<br />';

Вы получите ожидаемый результат :

test

При попытке записать в свойство :

$a->myVar = 10;

Вы получите исключение :

Exception: not allowed : myVar in /.../temp.php on line 19
21
ответ дан 3 December 2019 в 14:00
поделиться

Используйте константу. Ключевое слово const

2
ответ дан 3 December 2019 в 14:00
поделиться
class test {
   const CANT_CHANGE_ME = 1;
}

и называйте это test::CANT_CHANGE_ME

14
ответ дан 3 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: