Pas*_*TIN 21
我认为对于类属性,解决方案是:
__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
}
}
}
Run Code Online (Sandbox Code Playgroud)
实现类并尝试读取属性:
$a = new MyClass();
echo $a->myVar . '<br />';
Run Code Online (Sandbox Code Playgroud)
会得到你预期的输出:
test
Run Code Online (Sandbox Code Playgroud)
在尝试写入房产时:
$a->myVar = 10;
Run Code Online (Sandbox Code Playgroud)
会得到一个例外:
Exception: not allowed : myVar in /.../temp.php on line 19
Run Code Online (Sandbox Code Playgroud)
che*_*rtz 14
class test {
const CANT_CHANGE_ME = 1;
}
Run Code Online (Sandbox Code Playgroud)
你把它称为 test::CANT_CHANGE_ME