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")