PHP监听var覆盖

时间:2012-06-15 11:14:31

标签: php variables override listener

有没有办法听一个被覆盖的变量...

一个虚构的例子:

<?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()是不允许对象|数组

干杯。

2 个答案:

答案 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差。