Finally I find the reason.
It might be a bug in PHP 5.2.x :
If
zend.ze1_compatibility_mode = On
then you can see "__destruct" twice when execute the code I provide in my question.
This issue has been reported in other versions : https://bugs.php.net/bug.php?id=29756
Not affect PHP 5.3 in my test. (PHP 5.3 removed this setting)
Hope this answer will be helpful for some guys later :)