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] Appeler une méthode privée en dehors de la classe qui la définit


Sujet :

Langage PHP

  1. #1
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut [POO] Appeler une méthode privée en dehors de la classe qui la définit
    J'aimerais savoir s'il est possible en php, en utilisant la reflexion d'appeler une méthode privée en dehors du contexte de la classe qui la définit ?

    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class MyClass{
      private function MyPrivateMethod(){
        // some code
      }
    }
    $myClass = new MyClass();
    $method = new ReflectionMethod($myClass,'MyPrivateMethod');
    $method->invoke(null);
    Ce code là ne fonctionne pas, sinon je ne demanderais pas évidemment.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    La rendre publique ?

    Par définition une méthode privée est une méthode seulement utilisable par la classe.

    Peut etre qu'en la rendant protected (j'ai un doute si cette notion existe en php ^^") et en la surchargeant dans une classe fille et la rendant publique ca doit fonctionner.

    Mais en soi si tu as besoin d'appeler une méthode privée de ta classe c'est que ton analyse a un probleme quelque part

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 87
    Points : 102
    Points
    102
    Par défaut
    protected existe en php et c'est fort pratique !

  4. #4
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Pour appeler un méthode en dehors de la classe

    MyClass::MyPrivateMethod()

    Mais je suis pas certain que ca marche avec les méthodes privées...

  5. #5
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    En réalité, c'est surtout que le php ne gère ni les délégués, ni le concept "friend" du C++.

    Actuellement, je bosse sur un framework MVC qui devrait permettre de coder en php grosso modo de la même manière qu'on le fait quand on utilise des technologies comme wxWidgets, .NET ou Qt.

    En clair :
    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
    class myWindow extends Window{
      private $myTextbox,$myButton;
     
      public function __construct(){
        $myTextbox = new Textbox();
        $myButton = new Button();
        $myButton->OnClick = 'btnClick';
        //...
      }
     
      private function btnClick(){
        $myTextbox->Text = 'pouet';
      }
    }
    Application::Run('myWindow');
    Ceci, par exemple devrait permettre d'afficher une fenêtre, déplaçable à l'intérieur du navigateur, qui contient une boîte de texte (<input type="text".../>) et un bouton (<input type="button".../>).
    En cliquant sur le bouton, cela appelle une fonction javascript qui lance une requête au serveur (via XMLHttpRequest) et ce dernier se charge d'executer la fonction correspondant à l'événement survenu sur la page, ici : myWindow::btnClick()

    Alors, le truc c'est que actuellement, tout ceci fonctionne très bien, mis à part que je suis forcé d'avoir des méthodes publiques pour les événements...

    Ce qui me saoule légèrement : si je veux faire une classe de fenêtre spéciale, par exemple, dont certains événements ne doivent pas pouvoir être appelés par du code surchargé ou du nouveau code définit dans une fenêtre fille, c'est chiant.

    Si vous avez une idée, je suis preneur, évidemment.

  6. #6
    Membre actif Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Points : 274
    Points
    274
    Par défaut
    Une solution infectement crade: toutes les classes en public (méthodes & attributs compris) et après tu tries avec un diagramme ce que tu peux mettre un private ou protected...


    Ok -> [ o] (je sors)

  7. #7
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    En cliquant sur le bouton, cela appelle une fonction javascript qui lance une requête au serveur (via XMLHttpRequest) et ce dernier se charge d'executer la fonction correspondant à l'événement survenu sur la page, ici : myWindow::btnClick()
    Donc en fait, l'objet myWindow est construit une seconde fois lors de la requête asynchrone (ajax) pour pouvoir appeler myWindow::btnClick() ? As-tu mis au point un système d'objets persistants ?

  8. #8
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Il n'est pas construit à chaque appel au serveur.
    L'objet est serialisé.

Discussions similaires

  1. [PHP 5.3] [POO] Appel de méthode dans une autre méthode de la même classe
    Par LunaSev dans le forum Langage
    Réponses: 10
    Dernier message: 18/05/2010, 15h24
  2. Réponses: 3
    Dernier message: 25/02/2010, 13h47
  3. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  4. [POO] Appeler une méthode redéfinie de la classe parente
    Par Djakisback dans le forum Langage
    Réponses: 5
    Dernier message: 04/08/2006, 22h56
  5. [POO]Appelé une méthode d'une classe mère
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2005, 14h44

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