Ti suggerisco di rileggere il manuale ufficiale:
NON c'è scritto che il metodo __destruct() va richiamato esplicitamente. C'è scritto che verrà richiamato (tra gli altri casi) quando l'oggetto è distrutto esplicitamente.http://www.php.net/manual/en/language.oop5.decon.php
PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as all references to a particular object are removed or when the object is explicitly destroyed or in any order in shutdown sequence.
Per capire cosa significa, confronta l'esempio Example #2 Destructor Example con questo codice:
Codice PHP:
<pre>
<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
$obj = null;
print("This is the end!");
?>
</pre>