Bonjour à tous,
Mon problème est simple mais je ne trouve pas la solution. J'aimerai pouvoir supprimer un objet (et donc appeler sa fonction __destruct()) alors que plusieurs référence lui sont rattachées.
J'utilise PHP 5.2.10
Puisqu'un bon bout de code vaux mieux qu'un long discours… si si!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 class Object{ public static $collection; protected $internal_uuid; public static function factory($uuid = null){ if(isset(self::$collection[$uuid])){ return self::$collection[$uuid]; }else{ return new Object(); } } protected function __construct(){ $this->uuid(); /* Bon je vous copie pas tous le code mais en gros cette fonction affecte, * vous l'aurai compris, un identifiant unique a $this->internal_uuid. */ self::$collection[$this->internal_uuid] = $this; } public function __destruct(){ echo '__destruct'; } } //Après la déclaration de la classe, ben on s'en sert. $oObject = Object::factory(); unset($oObject); echo '*** FIN DU SCRIPT ***';
L'exécution de ce bout de code nous donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3*** FIN DU SCRIPT *** __destruct
Ce qui est tout a fait normal car la référence à notre objet se trouve encore dans Object::collection après le unset et c'est donc a la fin de l'exécution du script que l'appel à __destruct se fait.
Ce que j'aimerai donc obtenir c'est :
Avec Object::collection[<identifiant unique de mon instance>] == NULL juste après l'appel de unset($oObject)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3__destruct *** FIN DU SCRIPT ***
Quelqu'un a-t-il une idée ? Je m'arrache les cheveux la dessus… j'ai essayé dans tous les sens avec référence, sans référence (bon même si elles sont implicite en PHP5)
Partager