Vous devez utiliser ReflectionMethod. Vous pouvez utiliser isProtected
et isPublic
ainsi que getModifiers
http://www.php.net/manual/en/class.reflectionmethod.php http://www.php.net/manual/en/reflectionmethod.getmodifiers.php
$rm = new ReflectionMethod($this, $method); //first argument can be string name of class or an instance of it. i had get_class here before but its unnecessary
$isPublic = $rm->isPublic();
$isProtected = $rm->isProtected();
$modifierInt = $rm->getModifiers();
$isPublic2 = $modifierInt & 256; $isProtected2 = $modifierInt & 512;
Comme pour vérifier si oui ou non la méthode existe, vous pouvez le faire comme vous le faites maintenant avec method_exists
ou simplement essayer de construire le ReflectionMethod et une exception sera levée si elle n'existe pas. ReflectionClass
a une fonction getMethods
pour vous obtenir un tableau de toutes les méthodes d'une classe si vous souhaitez utiliser cela.
Disclaimer - Je ne sais pas PHP réflexion trop bien, et il pourrait y avoir une façon plus directe de le faire avec ReflectionClass ou quelque chose d'autre
Ai-je besoin de vérifier si la méthode $ existe, ou serait est public être 0 si la méthode est indéfinie? – Moak
Si vous essayez de construire ReflectionMethod sur une méthode qui n'existe pas, elle lèvera une exception. la première chose qu'il faisait avec 'ReflectionObject' itère à travers les méthodes existantes, donc ce n'est pas un problème –
@Moak: Vous pouvez utiliser [' ReflectionObject :: hasMethod'] (http://us2.php.net/manual/fr/reflectionclass .hasmethod.php) pour tester l'existence de la méthode. Cela fonctionne * même pour des méthodes privées * lors de la vérification en dehors de la classe. – Charles