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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
__destruct
*** FIN DU SCRIPT ***
Avec Object::collection[<identifiant unique de mon instance>] == NULL juste après l'appel de unset($oObject)




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)