我最近遇到這個代碼問題,我很不清楚它爲什麼產生這些結果。爲什麼這個Getter和Setter的行爲是這樣的?
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'先打印,因爲調用protected屬性的getter可以這樣做。
此外,我會想'A'會先打印(如1和2)。
發現它奇怪爲什麼它在同時回聲'a'和'b'時表現不同。
我能想到的唯一的事情是echo
- 帶有逗號的版本,每個參數進行評估,進而
呼應-The點的版本是不同的,它有,才能呼應的全面評價請求。
但不知道(它是如何評估?)。
感謝
請問downvoted的人請解釋原因? – 2013-03-08 12:16:17
我不知道,但我發現這個問題沒有錯,寫得很好,有作者的例子和自我嘗試,所以我會給你我的投票。 – Voitcus 2013-03-08 12:26:44
謝謝@Voitcus。有2 downvotes不知道爲什麼。這是一個似乎很奇怪的行爲的通用問題。 – 2013-03-08 12:28:22