класс Магия { 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")