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 :

Détruire une classe (et non une instance) [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut Détruire une classe (et non une instance)
    Bonjour,

    en PHP 5.2, je cherche à détruire toute référence à une classe existante (et non pas à détruire une instance).

    En clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Test {}
    fonctionQuiDetruit(Test);
    $oObject = new Test() -> FATAL ERROR
    Le but de l'exemple est d'obtenir une fatal error.

    J'aimerai si possible garder un environnement PHP standard et tout faire en PHP (sans passer par une extension quoi )

    A ma connaissance le Garbage collector ne détruit que les références / instances de classes. Peut-être serait-il possible de modifier son comportement pour faire ce que je veux (sans passer par les fonctions gc_ puisque je dois rester en PHP 5.2, ça ne dépend pas de moi)

    Merci d'avance de votre aide, je suis bloqué là
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Non tu ne peux pas faire ça sans passer par une extension (dont je n'ai pas connaissance, mais c'est possible).

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut

    Une classe est chargée dans PHP comme une fonction, on ne peut pas la "dé-déclarer" ni la redéclarer comme étant nulle.

    L'extension qui se rapproche le plus de ce que tu cherches est le runkit mais il est assez expérimental me semble-t-il...

  4. #4
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Super, merci de vos réponses.

    Effectivement runkit a l'air d'être ce qu'il me faut, mais la classe en question gère des traitements sur plusieurs centaines de millions d'entrées en base, je ne vais pas prendre le risque d'utiliser quelque chose qui risque d'être instable

    Je vais essayer de me débrouiller autrement, encore merci
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Est-ce que tu as la main sur le code de la (des) classe(s) que tu souhaites désactiver ? Car si c'est le cas, un simple attribut statique peut te permettre de déclencher une erreur ou une exception lors de l'instanciation d'une classe que tu aurais marquée comme desactivée...

  6. #6
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Non, je n'ai la main que sur son nom. En fait je crée un nouvel environnement de production qui doit permettre de faire fonctionner indifféremment un code conçu avec cet environnement ou non.

    une classe "User" existe déjà, et ne dois pas être modifiée. J'aurai aimé pouvoir créer une nouvelle classe User, renommer dynamiquement l'ancienne en (par exemple) User_Compatibility, car les deux classes sont automatiquement incluses.

    J'ai trouvé une parade en renommant l'ancienne classe en User_Compatibility, et en faisant en sorte que la nouvelle classe, dès le constructeur, sache s'il s'agit d'un appel à l'ancienne classe, et redirige les actions sur l'objet vers cette ancienne classe si besoin. Un peu du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // si il s'agit d'un appel à l'ancienne classe:
    if(...) {
    	$this->_oUserCompatibiliy   = new User_Compatibiliy($args);
    	// ::::: reassign values :::::
    	foreach (get_object_vars($this->_oUserCompatibiliy) as $key => $value) $this->$key = $value;
    }
     
    // puis:
    (..)
    public function  __call($funcName,  $arguments) {
    	if($this->_oUserCompatibiliy instanceof User_Compatibiliy) return $this->_oUserCompatibiliy->$funcName(implode(', ', $arguments));
    }
    C'est pas ce qu'il a de plus propre, mais dans mon cas je pense que c'est adapté...
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instanciation d'une classe fille depuis une classe mère
    Par khaled-benloucif dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2009, 23h59
  2. Réponses: 7
    Dernier message: 25/08/2008, 16h13
  3. Réponses: 2
    Dernier message: 02/02/2008, 07h37
  4. Réponses: 27
    Dernier message: 03/01/2008, 11h07
  5. Réponses: 8
    Dernier message: 20/07/2007, 14h28

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