При попытке изменить его, выдайте исключение.
Я полагаю, что решением для свойств класса было бы:
__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
class test {
const CANT_CHANGE_ME = 1;
}
и называйте это test::CANT_CHANGE_ME