1

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

一个虚构的例子:

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

干杯。

4

2 回答 2

1

PHP 中没有这样的机制。您可以为班级成员获得最接近的作品,并涉及魔术 getter 和 setter。例子:

<?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,以便用户代码可以优雅地恢复。

于 2012-06-15T11:21:56.410 回答
0

你的建议是不可能的。如果您想拥有一个“不可变”的值,一种实用的解决方案是将其隐藏在 getter 函数后面:

function getUser() {
    static $user;
    if (!$user) $user = new user_class();
    return $user;
}

当然这不是一个好习惯,但并不比拥有一个global $user.

于 2012-06-15T11:19:00.277 回答