1
クラスマジック{
    public $a = "A";
    protected $b = array("a" => "A", "b" => "B", "c" => "C");
    保護された $c = 配列 (1,2,3);
    public function __get($v) {
        echo "$v, ";
        $this->b[$v]; を返します。
    }
    public function __set($var, $val) {
        echo "$var: $val,";
        $this->$var = $val;
    }
}

$m = new Magic();
echo $m->a.", ".$m->b.", ".$m->c.",";
$m->c = "CC";
echo $m->a.", ".$m->b.", ".$m->c.",";

これは、ZCE の (実際の試験からではない) 問題の例です。誰かが私に説明してくれませんか...ここで何が起こっているのか、なぜ答えが...私が期待したものとはまったく違うのですか?

b, c, A, B, C,c: CC,b, c, A, B, C,
4

1 に答える 1

3

では…何を期待しますか?

呼び出します__get/__set実際のスコープからプロパティにアクセスする権利がない場合 / プロパティが存在しません。

したがって$m->a、直接「A」を取得します。$m->bandを最初に$m->c呼び出します("b, c, " をエコーし​​た後に "B" と "C" を返します)__get("b")__get("c")

同じことが:保護された (アクセスできない) プロパティとして$m->c = "CC";呼び出さ__set("c", "CC")れます。$c("c: CC" をエコーし​​た後、$m->c を "CC" に設定します)

于 2013-04-08T19:19:54.013 に答える