2009-09-12 7 views
12

Existe-t-il un moyen en PHP de détruire un objet à l'intérieur de ce même objet?PHP: Détruire un objet de l'intérieur de l'objet?

+0

a donné une réponse «oui-et-c'est-comme-comment» à une question essentiellement similaire ici - http://stackoverflow.com/a/21367011/1537018 –

Répondre

6

Il est un moyen de Autodestruction un objet:

Utilisez le tableau $GLOBALS pour trouver votre exemple en elle, puis utilisez unset(). Sachez que unset() ne pas appeler automatiquement la __destruct() méthode magique tout le temps ...

Il y a une telle note de cette manière (voir la documentation unset()) dans la documentation PHP, mais il ne précise pas exactement quand unset()-t n'appelle pas la méthode __destruct().

Et j'ai eu ce comportement spécifique:

Je fais:

unset($myInstance); 
$myInstance = clone $otherInstance; 

Et le __constructor est appelé d'abord, puis le __destruct(). Ou je voudrais que le __destruct() soit appelé d'abord parce que unset() est avant le clonage ... Je suis coincé avec ça maintenant ...

Nicolas.

+2

Les destructeurs sont appelés lors de la récupération de place ou lorsque le script se termine. – hakre

+0

Comme hakre l'a dit, jusqu'à ce que la variable $ myInstance soit hors de portée et que la garbage collection la récupère, le destructeur ne sera pas appelé. – Swivel

0

Non, je ne pense pas qu'il y en ait. Mais auriez-vous besoin d'une telle chose?

+1

Eh bien, pourquoi pas? Si vous créez un objet, on pourrait supposer qu'il devrait être capable de le détruire. – Christian

+2

@Christian la capacité de détruire un objet leis dans le même endroit où la capacité de les créer - pas à l'intérieur de l'objet lui-même. –

12

Si une méthode est appelée dans le contexte de l'objet, il doit y avoir au moins une référence à cet objet. Et puisque php supprime uniquement les objets inaccessibles, la réponse est: non.