Comment ajouter une méthode à une classe existante en PHP?
Je suis en utilisant WordPress comme un CMS, et je veux étendre l'une de ses classes, sans avoir à hériter d'une autre classe; c'est à dire je veux simplement "ajouter", plus les méthodes de cette classe:
class A {
function do_a() {
echo 'a';
}
}
alors:
function insert_this_function_into_class_A() {
echo 'b';
}
(d'une certaine façon de l'insertion de ce dernier dans Une classe)
et:
A::insert_this_function_into_class_A(); # b
Est-ce même possible tenace PHP?
source d'informationauteur Gal
Vous devez vous connecter pour publier un commentaire.
Si vous avez seulement besoin d'accéder à l'API Publique de la classe, vous pouvez utiliser un Décorateur:
Puis les envelopper l'instance de SomeClass:
Si vous avez besoin d'avoir accès à la
protected
de l'API, vous devez utiliser l'héritage. Si vous avez besoin d'accéder à laprivate
de l'API, vous devez modifier les fichiers de classe. Alors que l'héritage approche est fine, modifiying les fichiers de classe pourrait vous causer des ennuis lors de la mise à jour (vous perdrez toutes les corrections). Mais les deux est plus facile que d'utiliser runkit.Une mise à jour de façon pour 2014 qui s'adapte à portée.
Par exemple:
Vous pouvez utiliser le runkit extension pour cela, mais vous devriez vraiment envisager régulière de l'héritage de la place.
Voir
runkit_method_add
.Si la classe en question met en œuvre __appel de la magie, alors il est possible et assez facile. Si vous voulez savoir comment cela fonctionne, je vous suggère de lire L'extension d'objets avec de nouvelles méthodes à l'exécution.
Non vous ne pouvez pas modifier dynamiquement une classe au cours de l'exécution de PHP.
Vous pouvez accomplir cela en étendant la classe à l'aide régulière de l'héritage:
Ou vous pouvez modifier le WordPress fichiers sources.
Je préfère l'héritage. Il est beaucoup plus facile à gérer sur le long terme.