Пример магических методов PHP

У меня есть этот вопрос из руководства по изучению Zend PHP и не могу найти правильное объяснение …

<?php 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; ?> 

Согласно руководству, решение должно быть « b,c,A,B,C,c: CC,b,c,A,B,C ». Я не могу понять, почему, может, и так? Мое намерение состоит в том, что первый вызов $ m-> a приведет к результату «a», но это, очевидно, неправильно …

Поскольку __get() вызывает echo , некоторые данные выводятся до того, как вызывается echo вне класса.

Пройдя через первую строку с echo , вот как она выполняется:

 $m->a "A" is concatenated "," "," is concatenated $m->b "b," is echoed, "B" is concatenated "," "," is concatenated $m->c "c," is echoed, "C" is concatenated "m" "," is concatenated 

В этот момент b,c, уже был echo , и теперь отображается строка со значением A,B,Cm .