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!
L'exécution de ce bout de code nous donne :
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)
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)
Modifié par bilhackmac (15 Nov 2009 - 17:26)
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!

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 :
*** 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 :
__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)
Modifié par bilhackmac (15 Nov 2009 - 17:26)