Bonjour,
existe il un moyen de savoir si une methode est publique ou privée dans une classe en PHP ?
Bonjour,
existe il un moyen de savoir si une methode est publique ou privée dans une classe en PHP ?
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]
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 :
source : http://fr3.php.net/oop5.reflection
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(); } }
merci, je vais regarder de ce coté
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
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 !!!
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.
Bonjour,
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.Juste pour ma culture personnelle : quelle est l'utilité ?
À 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 programme informatique, non.Un développeur connait forcemment la visibilité des méthodes de la classe qu'il utilise, du moins en php !!!
Je ne vois pas ce que ca changes ?Il me semble que j'ai dit cela dans un certain contexte (viz "du moins en PHP") Thomas !
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.
Euh les méthodes de ton interface sont forcement publique donc quel interet, le programme ne voit que les méthodes de l'interface![]()
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager