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