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 :

Intercepter un appel de classe


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut Intercepter un appel de classe
    Bien le bonjour.

    J'essaie de faire un truc qui semble apparemment impossible, mais peut-être que vous avez la réponse à mon problème.

    J'ai actuellement un gros site que je suis en train de refactorer afin de le rendre plus simple et plus maintenable, et je veux utiliser la puissance des namespaces pour cela. Mon but est de pouvoir ajouter une classe dans un namespace "prioritaire" afin qu'elle soit prise automatiquement en compte sans que j'ai à toucher au code déjà existant.

    Exemple :

    Fichier "Specifique/Objet.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    namespace Specifique;
     
    class Objet extends \Commun\Objet { (...) }
    Fichier "Commun/Objet.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    namespace Commun;
     
    class Objet { (...) }
    Fichier "Commun/Partie.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    namespace Commun;
     
    class Partie { (...) }
    }
    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $objet = new Objet();
    $partie = new Partie();
    Ce que je veux faire, c'est que l'instanciation de la classe Objet pointe sur la classe du namespace Specifique, et que l'instanciation de la classe Partie pointe sur la classe du namespace Commun. Si je venais à supprimer la classe \Specifique\Objet, le code irait automatiquement prendre en compte la classe \Commun\Objet.

    Je pensais qu'il existait une fonction, à l'image de la méthode magique "__call()" pour les méthodes de classe, qui me permettrait d'intercepter l'appel à ces classes et d'en faire ce que je veux, mais je ne parviens pas à trouver, ni à concevoir, un tel système.

    Auriez-vous une idée ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namespace Commun;
     
    $objet = new Objet(); // instance de /commun/Objet
    $partie = new Partie(); // instance /commun/Partie
     
    $objet2 = new \Specifique\Objet; // instance de /Specifique/Objet
    Tu peux également déclarer des classes dans le namespace global (\).

    Note: seul PHP 5.3+ supporte les namespaces, la plupart des hébergeurs ne le supportent pas encore. Voir http://blog.pascal-martin.fr/post/st...ns-php-2011-09

    Je pensais qu'il existait une fonction, à l'image de la méthode magique "__call()" pour les méthodes de classe, qui me permettrait d'intercepter l'appel à ces classes et d'en faire ce que je veux, mais je ne parviens pas à trouver, ni à concevoir, un tel système.
    En effet, tu peux définir la méthode __callStatic (depuis PHP 5.3) qui permet de résoudre les appels de méthodes privées ou inexistantes. Mais à mois que tu n'implémentes un factory, ça n'a rien à voir avec les namespaces.

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    IL existe déjà plusieurs techniques pour faire cela, que tu devras adapter à ton projet.

    J'aime beaucoup le système de Kohana : le cascading filesystem

    ou encore chez Zend : le chargeur de plugin

    Bon code !

Discussions similaires

  1. [Package] Appel à une classe
    Par GLDavid dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2006, 12h49
  2. Appeler une classe CSS avec Javascript
    Par p0Kep0K dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2006, 14h50
  3. Appeler 2 classes en même temps?
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/02/2006, 23h38
  4. Réponses: 14
    Dernier message: 15/12/2005, 18h46
  5. [Exception]Connaitre la pile d'appel de classes/méthodes
    Par salome dans le forum Général Java
    Réponses: 2
    Dernier message: 19/03/2005, 20h21

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