Objet PHP : attention au __destruct

Dans la bible des erreurs à éviter car elles peuvent prendre la tête : la fonction __destruct sur un objet PHP.

Il faut être trés vigilent, en effet, cette fonction est appellé même après un exit, donc on peut avoir un état en base de donnée juste avant exit qu’on vient de verifier par un dump.

Et se retrouver après exit  avec un état différent, effectivement la fonction exit appelle tous les destructeurs des objets en mémoire.


Tags :

2 commentaires

Bonjour,

J’ai une application avec quelques classes et je cherche à m’assurer de libérer de la mémoire par mes destructeurs,. Or ceci sont appelée uniquement à la fin du script et non au moment du unset.

Exemple :

foreach( $this->pages as $p ) {
$analysex = new TAnalyse( $p[‘pid’] );
$analysex->lire();
$analysex->creer_themes();
$analysex->calculer_note();
//$analyse->__destruct();
unset( $analysex );
}

Le destructeur n’est pas appelé lors du unset – qui lui-même doit être explicite dnas ma boucle. En revanche, je peux l,appeler explicitement comme dans la ligne commentée, mais là, ça ne me paraît pas bine joli-joli…

Autre chose : si je commente l’appel de la méthode $analysex->creer_themes(), tout est ok. Cette méthode remplit un tableau d’autres objets :

public function creer_themes()
{
$this->aThemes = array(
1 => new TThemeStructure( $this ),
new TThemeEqTextuel( $this ),

Une idée, une piste??

Merci.

Vincent François
décembre 8th, 2007 at 20 h 55 min

Merci pour cet confirmation, Je n’arrivais pas à comprendre pourquoi le destruct était quand même exécuté après un exit…

Sun Location Vacances
juin 9th, 2008 at 14 h 10 min

Laisser un commentaire

Name (required)

Mail (will not be published) (required)

Website

Commentaire