この質問は関連しています: PHP マジック メソッドの例
承認された回答のコメントでこの質問をしましたが、気付いていないので、この質問を作成する必要があると思います。
<?php
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];
}
public function __set($var, $val) {
echo "$var: $val,";
$this->$var = $val;
}
}
$m = new Magic();
echo $m->a.",".$m->b.",".$m->c.",";
$m->c = "CC";
echo $m->a.",".$m->b.",".$m->c;
?>
出力:
b,c,A,B,C,c: CC,b,c,A,B,C
$m->c = "CC";
ここでは、すでに同じ名前の保護された変数があります。では、これは可視性のコンテキストでどのように動作する必要がありますか?
保護された変数の値を上書きする場合、保護c
された/プライベート変数の抜け穴ではありませんか? (そんなことはないと思います)
そうでない場合、ステートメントは、$this->$var = $val;
保護されていると既に定義されている同じ名前のパブリック変数を作成するようです。それは可能ですか?
また、このステートメントの後に:$m->c = "CC";
に再度アクセス$m->c
すると、PHP はパブリックな可視性がない__get
かのように再度呼び出します。それは、すぐ次のステートメントの寿命がないc
ことを意味しますか? $this->$var = $val;
(それも仕方ないとは思いますが)
誰でも説明できますか、そのような場合に動作する必要があり、どのようにそのような出力を出したのでしょうか?