私は最近このコードの質問に出くわしましたが、なぜこれらの結果が生成されるのかについて非常に不明です。
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]; //internal so fine with protected.
}
public function __set($var, $val ) {
echo "$var: $val,";
$this->$var = $val;
}
}
$m = new Magic();
//1
//echo $m->a;
//prints A
//2
//echo $m->a;
//echo $m->b;
//prints Ab, B
//3
//echo $m->a.",," . $m->b;
//prints b,A,,B
番号3の動作を理解できません。誰かが説明できれば、この動作のどこにも答えが見つからないため、非常に感謝しています。
アクセス修飾子とプロパティの可視性は理解していますが、保護されたプロパティを呼び出すゲッターが許可されているため、「b」が最初に印刷される理由がわからないため、いくつかのギャップが必要です。
さらに、「A」が最初に印刷されると思っていました(1と2のように)。
'a' と 'b' の両方を同時にエコーすると、なぜ動作が異なるのか不思議に思います。
私が考えることができる唯一のことはecho
、 - コンマバージョンでは、各引数が評価され、順番にエコーされます
- ドットバージョンは異なります。要求どおりにエコーする前に、完全に評価する必要があります。
しかし、よくわかりません(どのように評価されますか?)。
ありがとう