12

変更しようとするときは、例外をスローします。

4

7 に答える 7

24

クラスプロパティの解決策は次のようになると思います:

  • 興味のある名前のプロパティを定義しないでください
  • __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
        }
    }
}

クラスをインスタンス化し、プロパティを読み取ろうとしています:

$a = new MyClass();
echo $a->myVar . '<br />';

期待される出力が得られます:

test

プロパティに書き込もうとしている間:

$a->myVar = 10;

例外が発生します:

Exception: not allowed : myVar in /.../temp.php on line 19
于 2010-02-26T18:16:10.530 に答える
15
class test {
   const CANT_CHANGE_ME = 1;
}

そしてあなたはそれを次のように参照しますtest::CANT_CHANGE_ME

于 2010-02-26T18:13:35.883 に答える
1

定数を使用します。キーワードconst

于 2010-02-26T18:15:52.147 に答える