php中返回和回显的行为

Dud*_*ing 6 php

我对该计划的运作方式感到困惑; 代码应该打印A, bB 但它正在显示bA,B

class SampleClass {
    public $a = "A";
    protected $b = array ("a" => "A", "b" => "B", "c" => "C");

    public function __get($v){
        echo "$v";
        return $this->b[$v];
    }
}

$m = new SampleClass();

echo $m->a . ", " . $m->b;
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 9

这真的很有道理.让我们考虑一下执行顺序:

在PHP可以ECHO您请求的字符串之前,它必须首先评估它(即$m->a . ", " . $m->b部分)

所以在这一点上,解析器试图解析$ m-> a和$ m-> b,它解析第一个,但第二个失败,所以我们转到魔术方法.

神奇的方法回应了某些东西(第一个'b),然后将自己解析为B.

现在,我们需要完成我们开始的工作(原始回声).

那么我们有什么?

  1. 解决$ m-> b(过程中b中的回声).
  2. 回声"A,B"

把它们结合在一起?

BA,B