класс Магия {
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. ",";
Это примерный вопрос (а не фактический экзамен) для ZCE. Может кто-нибудь, пожалуйста, объясните мне … что здесь происходит, и почему ответ … совсем не то, чего я ожидал?
b, c, A, B, C,c: CC,b, c, A, B, C,
то … чего вы ожидаете?
Он вызывает __get / __set если у вас нет в вашей реальной области прав доступа к собственности / свойство не существует.
Таким образом, $m->a получает непосредственно «A»; $m->b и $m->c сначала вызовите __get("b") и __get("c") (верните «B» и «C» после эха «b, c»)
То же самое и для $m->c = "CC"; : он вызывает __set("c", "CC") поскольку $c является защищенным (не доступным) свойством. (задает $ m-> c в "CC" после эха "c: CC")