Magic methods __get and __set - example from ZCE

喜你入骨 提交于 2019-12-02 12:45:15

问题


class Magic {
    public $a = "A";
    protected $b = array("a" => "A", "b" => "B", "c" => "C");
    protected $c = array(1,2,3);
    public function __get($v) {
        echo "$v, ";
        return $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.",";

This is an example question (not from an actual exam) for ZCE. Can someone please explain to me... what's going on here, and why the answer is... not at all what I expected?

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

回答1:


then… what do you expect?

It calls __get/__set if you don't have from your actual scope the rights to access the property / the property doesn't exist.

So $m->a gets directly "A"; $m->b and $m->c call first __get("b") and __get("c") (return "B" and "C" after echoing "b, c, ")

The same is for $m->c = "CC";: it calls __set("c", "CC") as $c is a protected (non-accessible) property. (sets $m->c to "CC" after echoing "c: CC")



来源:https://stackoverflow.com/questions/15887116/magic-methods-get-and-set-example-from-zce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!