Bonjour,
Existe-il une fonction permettant de détruire une classe ou un simple
unset(Maclass);
suffit ?
En vous remerciant pour vos éclaircissements.
Bonjour,
Existe-il une fonction permettant de détruire une classe ou un simple
unset(Maclass);
suffit ?
En vous remerciant pour vos éclaircissements.
Bonjour
Détruire la classe ou détruire une instance de l'objet ?
Je ne sais pas faire la premier cas. Pour le second cas, tu peux utiliser la méthode __destruct ( voir http://fr.php.net/manual/fr/language.oop5.decon.php )
oui c'est bien l'instensation de la classe. Il parait que c'est détruit automatiquement en fin de page, mais c'est pas confirmé..
ben je te le confirmes. Mis à part bien sur si tu utilises un système de mémoire partagée comme peut le proposer apc.
Pas en fin de page, plutôt en fin de script.
Un test très simple :unset() appelle bien le destructeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php class Foo { public function __construct() { print "YEEPEA, i'm alive !"; } public function __destruct() { print "AAARRRRGGGHHHH, i'm dead !"; } } $myObj = new Foo(); unset($myObj);
des ouis des nons...
le test ci-dessus retourne« YEEPEA, i'm alive !AAARRRRGGGHHHH, i'm dead ! »
y'a pas une fonction qui permet de vérifier si l'objet est toujours ou non instancié, pas si la variable existe mais bien l'objet ?
« YEEPEA, i'm alive !AAARRRRGGGHHHH, i'm dead ! »
$myObj = new Foo();
testIns = $myObj;
unset($myObj);
echo $testIns;
Heu dans ce cas $testIns aura bien une classe de Foo(), puisque tu en fait une copie.
Si tu veux détruire la classe utilise la méthode __destruct
soit la classe
et puis essaye
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Foo { public function __construct() { print "YEEPEA, i'm alive !"; } public function __destruct() { print "AAARRRRGGGHHHH, i'm dead !"; } public function ecrit(){ echo ' j\'existe ou pas'; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $myObj = new Foo(); $myObj->__destruct(); //vérifie en rappelant la méthode ecrit $myObj->ecrit(); //tu auras dans ce cas une erreur ;
Un cas intéressant dans ce commentaire du manuel : http://fr.php.net/manual/fr/function.unset.php#84911
Intéressant pour ce qu'il y est dit, mais aussi pour la question présente
Donc si le destructeur est appelé, les ressources sont bien libérées.Objects will only free their resources and trigger their __destruct method when *all* references are unsetted.
Cela est bien l'affaire du gc. C'est lui qui détecte que les objets n'ont plus de références et zou les détruits.
Maintenant la question qui me vient à l'esprit, un objet instancié dans le contexte d'une fonction z, sans aucune autre réf, est il bien détruit à la sortie de la fonction ou bien à la fin du script ?
Avec le petit exemple qui va bien :
Et le résultat nous montrant que le gc fait son job à chaque changement de contexte :
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 <? class x{ public function __construct(){ echo "hello, it's me !"."<br />"; } public function __destruct(){ echo "Bye, i'm not there anymore..."."<br />"; } } echo "let's go."."<br />"; function z(){ $t = new x(); } echo "let's make call to z."."<br />"; z(); echo "let's end script."."<br />"; ?>
Est il encore nécessaire de se soucier de la destruction des objets en php ?let's go.
let's make call to z.
hello, it's me !
Bye, i'm not there anymore...
let's end script.
Peut être dans certains cas, mais bon le gc est là pour cela et semble le faire très bien.
bye
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager