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 )
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.
Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]
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 ;
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
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
Partager