Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1866 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Suicider un objet ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Suicider un objet ?

n°1707643
art_dupond
je suis neuneu... oui oui !!
Posté le 25-03-2008 à 21:46:33  profilanswer
 

youp,
 
 
est-ce possible de faire se suicider un objet en php ?
 
Le but est que si mon objet n'est plus utile, il le sait de lui même et s'auto unset.
 
 
Marchi :)


---------------
oui oui
mood
Publicité
Posté le 25-03-2008 à 21:46:33  profilanswer
 

n°1707712
Fused
Posté le 25-03-2008 à 23:37:16  profilanswer
 

Sa durée de vie n'excède pas le chargement de ta page de toutes façons, sauf si tu le garde en session, cookie, ... tu n'as qu'a le détruire si c'est le cas.

n°1707788
masklinn
í dag viðrar vel til loftárása
Posté le 26-03-2008 à 09:10:46  profilanswer
 

art_dupond a écrit :

youp,
 
 
est-ce possible de faire se suicider un objet en php ?
 
Le but est que si mon objet n'est plus utile, il le sait de lui même et s'auto unset.
 
 
Marchi :)


C'est le rôle du garbage collector [:spamafote]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1707888
FlorentG
Posté le 26-03-2008 à 11:18:59  profilanswer
 

masklinn a écrit :

C'est le rôle du garbage collector [:spamafote]


Voilà. Et y'a même la gestion des destructeurs [:dawa]
 
Genre :

Code :
  1. class MyClass {
  2.   public function __destruct()
  3.   {
  4.      // Nettoyage additionnel
  5.   }
  6. }

n°1707933
erwan83
Du Shift DEL tu te méfieras !
Posté le 26-03-2008 à 11:59:36  profilanswer
 

FlorentG a écrit :


Voilà. Et y'a même la gestion des destructeurs [:dawa]
 
Genre :

Code :
  1. class MyClass {
  2.   public function __destruct()
  3.   {
  4.      // Nettoyage additionnel
  5.   }
  6. }



 
Garbage collector, en gros en français c'est la benne à ordures  :pt1cable:  :jap:


---------------
http://www.ypikay.com
n°1707936
masklinn
í dag viðrar vel til loftárása
Posté le 26-03-2008 à 12:02:25  profilanswer
 

FlorentG a écrit :


Voilà. Et y'a même la gestion des destructeurs [:dawa]
 
Genre :

Code :
  1. class MyClass {
  2.   public function __destruct()
  3.   {
  4.      // Nettoyage additionnel
  5.   }
  6. }



Ouais mais ça c'est quasiment jamais utile, en java il est même déconseillé de l'utiliser. Pareil en Python d'ailleurs, parce que ça interdit au détecteur de cycle de tourner correctement


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1707960
art_dupond
je suis neuneu... oui oui !!
Posté le 26-03-2008 à 12:32:13  profilanswer
 

Fused a écrit :

Sa durée de vie n'excède pas le chargement de ta page de toutes façons, sauf si tu le garde en session, cookie, ... tu n'as qu'a le détruire si c'est le cas.


Oui l'objet est en session.
 
En fait, l'objet se crée sur une page "particulière", vit le temps de quelques pages (en fonction d'un paramètre $ttl qui diminue à chaque changement de page) et est détruit quand ($ttl == 0)
 
Pour l'instant, sur chaque page, je fais
 

Code :
  1. if ($Obj->TTL() <= 0) unset($Obj)


 
et j'aimerais pouvoir faire (oui ça ne change pas grand chose, mais c'est aussi pour apprendre :))
 

Code :
  1. $Obj->AutoUnset() // détruit l'objet si ($ttl <= 0)


 
:)
 
 
C'est faisable avec le gc ça ? Je pensais que le gc était un "truc automatique" (mais bon, je connais pas bien ;))
 
 
 
 
ps: j'ai bien essayé avec __destruct, mais si j'ai bien compris, c'est juste une fonction qui est appelée quand on unset l'objet (:??:)
pps: pour le gc, j'aurais besoin d'un peu d'aide si c'est faisable avec, je ne trouve rien de concret pour mon truc :(


---------------
oui oui
n°1707988
CyberDenix
Posté le 26-03-2008 à 13:33:23  profilanswer
 

En principe tu fais un truc du style :
$objet->__destruct();
$objet = null;


---------------
Directeur Technique (CTO)
n°1707992
masklinn
í dag viðrar vel til loftárása
Posté le 26-03-2008 à 13:37:09  profilanswer
 

CyberDenix a écrit :

En principe tu fais un truc du style :
$objet->__destruct();
$objet = null;


sûrement pas.
 

Citation :

The destructor method will be called as soon as all references to a particular object are removed or when the object is explicitly destroyed or in any order in shutdown sequence.


http://fr2.php.net/manual/en/language.oop5.decon.php
 
Le destructeur est appelé automatiquement quand le GC dégage l'objet, e.g. après l'unset.
 
Mais dans tous les cas, ça ne permet pas de faire ce que art_dupond demande, qui n'est pas possible.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1708025
art_dupond
je suis neuneu... oui oui !!
Posté le 26-03-2008 à 14:04:55  profilanswer
 

oki merci :jap:


---------------
oui oui
mood
Publicité
Posté le 26-03-2008 à 14:04:55  profilanswer
 

n°1708065
FlorentG
Posté le 26-03-2008 à 14:27:39  profilanswer
 

masklinn a écrit :

Le destructeur est appelé automatiquement quand le GC dégage l'objet, e.g. après l'unset.


Et à cause du GC de type refcount, ça ne sert même pas en cas de références circulaires :/
 

Code :
  1. class A
  2. {
  3.    public $b;
  4. }
  5.  
  6. class B
  7. {
  8.    public $a;
  9. }
  10.  
  11. $a = new A();
  12. $b = new B();
  13.  
  14. $a->b =& $b;
  15. $b->a =& $a;
  16.  
  17. xdebug_debug_zval('a', 'b');
  18.  
  19. unset($a);
  20.  
  21. xdebug_debug_zval('a', 'b');


 
Donne
 

Code :
  1. a:
  2. (refcount=2, is_ref=1),
  3. object(A)[1]
  4.   public 'b' => (refcount=2, is_ref=1),
  5.     object(B)[2]
  6.       public 'a' => (refcount=2, is_ref=1),
  7.         &object(A)[1]
  8. b:
  9. (refcount=2, is_ref=1),
  10. object(B)[2]
  11.   public 'a' => (refcount=2, is_ref=1),
  12.     object(A)[1]
  13.       public 'b' => (refcount=2, is_ref=1),
  14.         &object(B)[2]
  15. b:
  16. (refcount=2, is_ref=1),
  17. object(B)[2]
  18.   public 'a' => (refcount=1, is_ref=0),
  19.     object(A)[1]
  20.       public 'b' => (refcount=2, is_ref=1),
  21.         &object(B)[2]


 
Donc unset ne fait déréférencer la variable que dans le scope local [:moule_bite]

n°1708091
masklinn
í dag viðrar vel til loftárása
Posté le 26-03-2008 à 14:39:39  profilanswer
 

FlorentG a écrit :


Et à cause du GC de type refcount, ça ne sert même pas en cas de références circulaires :/
 

Code :
  1. class A
  2. {
  3.    public $b;
  4. }
  5.  
  6. class B
  7. {
  8.    public $a;
  9. }
  10.  
  11. $a = new A();
  12. $b = new B();
  13.  
  14. $a->b =& $b;
  15. $b->a =& $a;
  16.  
  17. xdebug_debug_zval('a', 'b');
  18.  
  19. unset($a);
  20.  
  21. xdebug_debug_zval('a', 'b');


 
Donne
 

Code :
  1. a:
  2. (refcount=2, is_ref=1),
  3. object(A)[1]
  4.   public 'b' => (refcount=2, is_ref=1),
  5.     object(B)[2]
  6.       public 'a' => (refcount=2, is_ref=1),
  7.         &object(A)[1]
  8. b:
  9. (refcount=2, is_ref=1),
  10. object(B)[2]
  11.   public 'a' => (refcount=2, is_ref=1),
  12.     object(A)[1]
  13.       public 'b' => (refcount=2, is_ref=1),
  14.         &object(B)[2]
  15. b:
  16. (refcount=2, is_ref=1),
  17. object(B)[2]
  18.   public 'a' => (refcount=1, is_ref=0),
  19.     object(A)[1]
  20.       public 'b' => (refcount=2, is_ref=1),
  21.         &object(B)[2]


 
Donc unset ne fait déréférencer la variable que dans le scope local [:moule_bite]


heuuu...
encore heureux, unset ça dégage la référence qu'on lui demande de dégager, pas une autre au pif comme ça tac tac, même pour PHP ça atteindrait des sommets d'imbécilité [:pingouino]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1708123
FlorentG
Posté le 26-03-2008 à 15:04:01  profilanswer
 

masklinn a écrit :


heuuu...
encore heureux, unset ça dégage la référence qu'on lui demande de dégager, pas une autre au pif comme ça tac tac, même pour PHP ça atteindrait des sommets d'imbécilité [:pingouino]


C'était du point de vue de ce que t'as dis : le GC qui appelle le destructeur après un unset.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Suicider un objet ?

 

Sujets relatifs
[PHP] Petit soucis de tableau d'un objetProblème de pointeur objet mère qui pointe sur objet fille
Affichage d'un objet d'une std::listUn bon livre pour la java orienté objet...
Code sources Prog objet ou les trouverJavascript Objet et bonnes pratiques
[C++ .NET] Comment passer un pointeur d'objet managé à un thread?QT4 Comment afficher un objet QPainter dans une fenetre principale??
Faire un screenchot d'un objet ou d'une zone (Winform)Problème Objet Concaténé
Plus de sujets relatifs à : Suicider un objet ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)