class parent{ function run($methodname) { echo method_exists(__CLASS__, $methodname); } } class child extends parent { function order(){ echo 'hello'; } } $test = new child(); $test->run('order'); //false The method_exists cannot find the method order in child class. How to make it work?
3 Réponses :
Voir aussi http://www.php.net/manual/fr /language.oop5.late-static-bindings.php . P> __ classe __ code> est liée à la classe à laquelle il est utilisé, non pas pour hériter des classes. Vous pouvez résoudre ceci en utilisant
$ ceci code> comme référence d'objet. P>
Essayez
echo method_exists($this, $methodname);
@paragasu: Si la solution donnée a fonctionné, il est considéré comme bon, donc étiquette d'accepter la réponse. C'est bon pour votre et la RIP du répondeur :)
@Gordonm Votre réponse est ce qui est ruinant la pile. Cette réponse est meilleure et celle ci-dessous, mieux encore. La meilleure réponse est fonctionnelle, mais trop élaborée.
@Erick, je comprends votre sentiment en général, même si je pense que c'est égaré ici. Vous avez répondu à un commentaire de 10 ans qui lui-même était une réponse à un commentaire désormais supprimé. Comment cela aide-t-il?
@Yoshi Évidemment, l'âge est d'aucune conséquence ni d'importance lorsque la question reste pertinente de même que la réponse. Mon point est que la châtiment sur l'étiquette et la forme sont devenues si fortes que c'est la pile de ruine. J'utilise la pile aussi longtemps que je me souviendrai (15 ans et plus, IIRC) et c'était beaucoup plus amusant et productif en arrière quand il était plus libre. À l'époque, pourraient alors participer à des discussions intéressantes et arriver à de nouvelles solutions, mais maintenant, il est devenu stérile et boiteux.
J'ai utilisé la classe de réflexion pour obtenir des détails de classe. J'espère que cela aide
function ownMethodExist($class, $method) { $className = get_class($class); $reflection = new ReflectionClass($className); if($reflection->getMethod($method)->class == $className) { return true; } return false; }