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 にはそのようなメカニズムはありません。最も近いものはクラス メンバーに対して機能し、魔法のゲッターとセッターが関与します。例:

<?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

あなたが提案することは不可能です。「不変」の値が必要な場合、実用的な解決策の 1 つは、ゲッター関数の背後に隠すことです。

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

もちろん、これは良い習慣ではありませんが、global $user.

于 2012-06-15T11:19:00.277 に答える