有没有办法听一个被覆盖的变量...
一个虚构的例子:
<?php
$user = new user_class();
function callback_foo(){
die('Do not override this variable you are not permited...');
}
listen_var_change('user','callback_foo');
?>
我希望上面的代码可以解释我想要做的事情,我只想确保var是常量。
我不能使用define()
是不允许对象|数组
干杯。
答案 0 :(得分:1)
PHP中没有这样的机制。最接近你可以为班级成员工作,并涉及魔术吸气剂和制定者。例如:
<?php
class Foobar {
private $user;
public function __construct($user) {
$this->user = $user;
}
public function __set($key, $val) {
if ($key === 'user') {
die("Do not change this value, or a fluffy kitty dies.");
}
}
public function __get($key) {
if ($key === 'user') {
return $this->user;
}
}
}
这几乎就是你如何在PHP中实现只读属性(尽管你可能想要抛出一个可捕获的异常而不是die
,这样用户代码就可以优雅地恢复。
答案 1 :(得分:0)
你的建议是不可能的。如果你想拥有一个“不可变”值,一个实际的解决方案是将它隐藏在getter函数后面:
function getUser() {
static $user;
if (!$user) $user = new user_class();
return $user;
}
当然这不是一个好习惯,但并不比拥有global $user
差。