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] Savoir si une méthode est publique


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut [POO] Savoir si une méthode est publique
    Bonjour,

    existe il un moyen de savoir si une methode est publique ou privée dans une classe en PHP ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Euh... en essayant de l'appeler depuis une autre classe ?
    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]

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    C'est assez compliqué mais tu peux utiliser la réflection qui te permet de faire du reverse enginering sur tes classes/fonctions.

    Exemple :
    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
    <?php
    class Counter extends Object implements Serializable
    {
        const START = 0;
        private static $c = Counter::START;
     
        public function count() {
            return self::$c++;
        }
    }
     
    // Create an instance of the ReflectionClass class
    $class = new ReflectionClass('Counter');
    // Liste les méthodes de la classe Counter et écris le nom si est publique
    $methods = $class->getMethods();
    foreach($methods as $method){
        if($method->isPublic()){
            echo $method->getName();
        }
    }
    source : http://fr3.php.net/oop5.reflection

  4. #4
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    merci, je vais regarder de ce coté

  5. #5
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Juste pour ma culture personnelle : quelle est l'utilité ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Je me pose la meme question !

    Un développeur connait forcemment la visibilité des méthodes de la classe qu'il utilise, du moins en php !!!

  7. #7
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par lespoches Voir le message
    Je me pose la meme question !

    Un développeur connait forcemment la visibilité des méthodes de la classe qu'il utilise, du moins en php !!!


    biensur , si php appelle lui meme la méthode... mais quand mon cas, c est dans le cadre d une communication Flash/PHP que par le biais d une requête la methode est appellé et je dois reserver des methodes a un usage interne et d autres sont ouvertes a l usage externe.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Pourquoi alors n'utilises tu pas une interface répertoriant les service dispo pour ton truc flash. Seules les méthodes de l'interface sont accessibles.

  9. #9
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Juste pour ma culture personnelle : quelle est l'utilité ?
    Exemple : j'ai créé un CMS et je veux que les utilisateurs puissent ajouter leur propre type de données pour personnaliser la saisie des articles (DatePicker, upload d'image, listes a puces etc..). Pour cela je créé une classe que j'appelerais ModuleLoader.

    À chaque fois que l'utilisateur veut créer une nouveau type de données spécifique, il va sur le ModuleLoader, un menu déroulant s'affiche listant toutes les classes contenu dans un dossier "modules/". Une fois la classe choisie j'ai la possibilité de personnaliser ce type de données car des méthodes de la classe choisie sont publiques, mon ModuleLoader, par réfléction, liste les propriétés publiques.

    Par exemple le type de données est un uploader d'image qui les découpe automatiquement. Une propriété publique setSizes() existe qui prend une collection de pair hauteur / largeur. Une fois la saisie des infos des propriétés publiques, celles-ci sont enregistrés par mon ModuleLoader en XML (DatatypeId / XmlProperties).

    À chaque chargement d'un article il y a un appel à la classe ModuleLoader qui se charge d'aller charger la classe d'upload d'image et valoriser ses propriétés suivant les valeurs enregistrés au format XML.

    Un développeur connait forcemment la visibilité des méthodes de la classe qu'il utilise, du moins en php !!!
    Un programme informatique, non.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Un programme informatique, non.
    Il me semble que j'ai dit cela dans un certain contexte (viz "du moins en PHP") Thomas !

    Ote moi un doute, PHP est toujours un langage interprété ??
    Il me semble aussi que j'ai parlé d'interface pour allez au bout de ma pensée !

  11. #11
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Il me semble que j'ai dit cela dans un certain contexte (viz "du moins en PHP") Thomas !
    Je ne vois pas ce que ca changes ?

    Peut-être devrais-je réctifier par :

    "Un programme informatique en php, non".

    Mais non car je fais référence à la notion d'intelligence informatique, un programme informatique, tant qu'il n'a pas testé la visibilité des méthodes par réfléction, ne peut savoir si une méthode est publique ou non.

    Aussi, je disais ca car apparement tu n'as compris tout l'intéret de la réflection, tu parles d'un "développeur", alors que ce n'est pas le développeur qui manipules la classe mais bien le programme (dans ce contexte).

    Ne perdons pas davantage de temps , evidemment si c'est un développeur qui manipules directement la classe, la reflection n'a tout simplement aucun intérêt.

  12. #12
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par lespoches Voir le message
    Pourquoi alors n'utilises tu pas une interface répertoriant les service dispo pour ton truc flash. Seules les méthodes de l'interface sont accessibles.
    oui, c est deja ce que je fais, mais verouiller avec le test public/private est une sécurité supplémentaire

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Euh les méthodes de ton interface sont forcement publique donc quel interet, le programme ne voit que les méthodes de l'interface

  14. #14
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    dans mon cas j ai besoin de le savoir car l appel est interne à la classe.

    Merci a tous, j ai obtenu ma réponse.

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

Discussions similaires

  1. Savoir si une string est un nombre
    Par SteelBox dans le forum SL & STL
    Réponses: 10
    Dernier message: 14/02/2005, 19h59
  2. Savoir quand une hotkey est relachée
    Par kriterium dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2004, 14h44
  3. Savoir si une connection est établie sur un port
    Par Malone dans le forum Web & réseau
    Réponses: 3
    Dernier message: 06/12/2003, 08h22
  4. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 14h42
  5. [VB6] [Impression] Savoir si une imprimante est installée
    Par Norm59ttp dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 19/12/2002, 09h29

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