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