首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP魔术方法示例

PHP魔术方法示例
EN

Stack Overflow用户
提问于 2011-12-10 04:07:47
回答 1查看 1.5K关注 0票数 10

我在Zend PHP学习指南中有这个问题,但找不到合适的解释……

代码语言:javascript
复制
<?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",但这显然是错误的……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-10 04:18:07

因为__get()调用echo,所以在类外部的echo被调用之前就输出了一些数据。

单步执行echo的第一行,下面是它的执行方式:

代码语言:javascript
复制
$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的字符串。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8451116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档