phpのマジックメソッド、__set()の挙動
<?php class Sample{ public function __set($name, $value){ $this->$name = "Setted".$value; } } ?>
こんなクラスがあったとして、
これを以下のようにするとどうなるでしょうか。
<?php $sample = new Sample; $sample->abc = "VALUE"; echo $sample->abc; // SettedVALUE だろうよ。 echo "<br />"; $sample->abc = "2ndVALUE"; echo $sample->abc; // さて、ここが問題。 ?>
問題の箇所はどう表示されるのかっていうと、
× Setted2ndVALUE ○ 2ndVALUE
これはつまり、
__set() メソッドは、
一度セットされたプロパティへの再度の代入の際には呼び出されないってことですね。
では
<?php $sample = new Sample; $sample->abc = "VALUE"; unset($sample->abc); // 消した! $sample->abc = "2ndVALUE"; echo $sample->abc; // ここはどうなんだ?
予想通りこれは、
Setted2ndVALUE
と表示されました。
要するに__set()メソッドは、
isset と同じ条件で呼び出されるってこと!