2017-03-09 18 views
1

因此,我認爲(現在)認爲我誤解了PHP中的magic __get和__set。精細。php輸出值與調試器值不匹配

但是這個例子的輸出不僅是意外的,它也不匹配調試器所說的將要輸出的內容。

<?php 
// put your code here 
class Magic { 
    public $a = 'A'; 
    public $x = 'X'; 
    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.","; 

echo $m->x; 
?> 

的這個輸出是:

B,C,A,B,C,X現在

,我設置了XAMPP和NetBeans只是爲了調試這個......當我把在

echo $m->a.",".$m->b.",".$m->c.","; 

一個斷點,並懸停在M- $>一,我看到

(String)將

但是,這不是輸出?獲得輸出的第一個字符是

b

發生了什麼事?調試器說,$ M-> A的值,但是當我們呼應它,它,輸出b

回答

1

好像ZCE問題)

echo $m->a.",".$m->b.",".$m->c.",";線是指:的

  1. 獲得價值$m->a。這是A。隨着調試器向您顯示。
  2. 獲得價值$m->b。您沒有大衆屬性b,因此__get運行。它迴響b,(來自線路echo "$v,";)並返回B
  3. 獲得值$m->c。您沒有大衆財產c,因此__get運行。它迴響c,(來自線路echo "$v,";)並返回C
  4. 連接返回值('A','B','C')與,

所以,echo之前荷蘭國際集團已經串聯做了兩個echo S的結果:b,c,。之後A,B,C字符串echo ed

+0

可能是這樣一個問題;) 而你的答案當然是有意義的(面/手掌) – GHolmes