IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Comment détruire un objet ?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 24
    Points : 18
    Points
    18
    Par défaut [POO] Comment détruire un objet ?
    Bonjour,

    Soit une classe appelée MA_classe.

    J'instancie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $monInstance = new MA_classe();
    Mais si je veux "libérer" mon objet, le détruire, comment je fais ?

    Je sais que cela se fait tout seul à la fin du script, mais imaginons le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $monInstance = new MA_classe();
    $monInstance = new MA_classe();
    Ai-je un seul objet en mémoire (le fait de réaffecter une valeur à ma variable $monInstance a t-il bien supprimer de la mémoire l'objet lié à la première instance) ?

    Autrement dit, si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $monInstance = new MA_classe();
    $monInstance = '';
    L'objet est-il toujours en mémoire ?

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $monInstance = new MA_classe();
    unset($monInstance);
    L'objet est-il toujours en mémoire ?

    Merci pour vos réponses, parce que mes recherches sur internet aboutissent toujours sur "l'objet est détruit automatiquement à la fin d'exécution du script".

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    pour répondre à ta question je te propose de regarder ce script :
    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
    20
    21
    22
    23
    <?php
    echo "debut du script<br>";
     
    class r
    {
    	public function __construct()
    	{
    		echo "__construct appelé<br>";
    	}
     
    	public function __destruct()
    	{
    		echo "__destruct appelé<br>";
    	}
    }
     
    $unevariable = new r();
    $unevariable = new r();
     
     
     
    echo "fin du script<br>";
    ?>
    Qui nous donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    debut du script
    __construct appelé
    __construct appelé
    __destruct appelé
    fin du script
    __destruct appelé
    On en conclue qu'avant la ré affectation l'objet est détruit.

    bye

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Bonjour kaymak,

    Merci pour ta réponse. Par contre, cela concerne PHP5.

    En est-il de même sous PHP4 ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    J'imagine que oui, mais n'ayant pas de possibilités de vérifier cela en php, et n'ayant pas non plus les capacités d'étudier le code du core php pour te répondre, je ne peut en être certain.... :/

  5. #5
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Essaye avec la fonction register_shutdown_function

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Les classes fonctionnent sous PHP4 ??

  7. #7
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Biensur qu'elles fonctionnent mais elles sont moins puissantes qu'en php5.
    Le constructeur s'appel comme la classe, il n'y a aucune méthode magique (pas de destructeur, pas de __get &co) et quelques différences comme par exemple les références, les controles comme private, public protected etc n'existaient pas et j'en passe.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/12/2007, 00h16
  2. [DOM] Comment détruire un objet jQuery ?
    Par tatayecorp dans le forum jQuery
    Réponses: 1
    Dernier message: 20/09/2007, 10h57
  3. Réponses: 4
    Dernier message: 16/01/2007, 13h42
  4. Réponses: 1
    Dernier message: 11/02/2006, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo