2017-03-09 13 views
1

PHPでは、魔法の__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-を上にマウスを移動します

しかし、それは何が出力されていませんか?出力する最初の文字は

b

何が起こっているのですか?デバッガは$ M-> aがAの値を持っているが、我々はそれをエコーするとき、それはB

答えて

1

がZCEの質問のように思える出力)

と言うラインecho $m->a.",".$m->b.",".$m->c.",";の意味:の

  1. 取得値を$m->aAです。デバッガがあなたに示すように。
  2. $m->bの値を取得します。 公開プロパティbがないので、__getが実行されます。 b,(行echo "$v,";から)を返し、B
  3. を返します。$m->cの値を取得します。 公開プロパティcがないので、__getが実行されます。それはc,echo "$v,";から)と返信し、Cを返します。
  4. の値( 'A'、 'B'、 'C​​')に戻して連結します。,です。 b,c,echoする前に

は、すでに完了2 echo秒を連結した結果をINGの。その後A,B,C文字列echo ed

+0

そうかもしれません;) あなたの答えは当然です(顔/手のひら) – GHolmes

関連する問題