8
votes

PHP METHODY_EXISTS ne travaille pas sur les enfants de classe?

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?
php

0 commentaires

3 Réponses :


8
votes

__ classe __ est liée à la classe à laquelle il est utilisé, non pas pour hériter des classes. Vous pouvez résoudre ceci en utilisant $ ceci comme référence d'objet.

Voir aussi http://www.php.net/manual/fr /language.oop5.late-static-bindings.php .


0 commentaires

7
votes

Essayez

echo method_exists($this, $methodname); 


4 commentaires

@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.



1
votes

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;
}


0 commentaires