我对该计划的运作方式感到困惑; 代码应该打印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)
这真的很有道理.让我们考虑一下执行顺序:
在PHP可以ECHO您请求的字符串之前,它必须首先评估它(即$m->a . ", " . $m->b
部分)
所以在这一点上,解析器试图解析$ m-> a和$ m-> b,它解析第一个,但第二个失败,所以我们转到魔术方法.
神奇的方法回应了某些东西(第一个'b),然后将自己解析为B.
现在,我们需要完成我们开始的工作(原始回声).
那么我们有什么?
把它们结合在一起?
BA,B