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 と同じ条件で呼び出されるってこと!