6

これが私のコードです:

<?php

class SampleClass {

    public function __get($name){
        echo "get called";
        echo $name;
    }

    public function __set($name, $value) {
        echo "set called";
    }

}

?>

そして私のインデックスファイル:

$object = new SampleClass();
$object->color = "black";
echo $object->color;

このコードをそのまま実行すると、次の出力が得られます。

set calledget calledcolor

しかし、私がコメントアウトした場合

public function __set($name, $value) {
    echo "set called";
}

上記の部分(この部分のみ)の場合、出力は次のようになります。

では、ここで何が起こったのでしょうか。

4

2 に答える 2

4

__getプロパティが存在しない場合にのみ呼び出されます。を削除すると、設定時にプロパティが作成されるため、php__setを呼び出す代わりに、プロパティを返すだけです。__get

それについて考える簡単な方法は、__getそれ__setがエラーハンドラーであるということです-phpが他の方法であなたの要求を受け入れることができないとき、彼らはキックインします。

于 2013-01-28T21:36:50.820 に答える
3

これは何が起こっているのかについての説明です。最初の例では。オブジェクト内に値を保存したことはなく、宣言されたプロパティも存在しませんでした。これは、echo $object->color;から何も返されないため、実際には何もしません__get

2番目の例では、オブジェクトのプロパティに値を割り当てました。オブジェクトでプロパティを宣言しなかったため、デフォルトでpublicとして作成されます。公開されているため__get、アクセス時に呼び出されることはありません。

于 2013-01-28T21:42:09.693 に答える