J'ai un système de modèles:Emuler héritage multiple en php
abstract class R00_Model_iUnique { }
abstract class R00_Model_iFamilyUnique extends R00_Model_iUnique { } // for models with hierarchy
abstract class R00_Model_iTaggedUnique extends R00_Model_iUnique { } // for models with tags
// and, for example
class R00_Model_User extends R00_Model_iUnique { }
class R00_Model_Comment extends R00_Model_iFamilyUnique { }
class R00_Model_Post extends R00_Model_iTaggedUnique { }
Il va être R00_Model_iCommentableUnique et R00_Model_Post veut être héritée de celle-ci. Mais ce n'est pas possible, c'est déjà hérité de R00_Model_iTaggedUnique, et je ne pense pas qu'il soit intelligent d'hériter R00_Model_iTaggedUnique de R00_Model_iCommentableUnique ou vice versa. Je n'ai imaginé qu'une seule idée pour l'implémenter, mais j'ai quelques doutes. Peut-être pourriez-vous me parler de méthodes intelligentes ou critiquer cette méthode?
Je pensais à faire R00_Model_i * unique non classes, mais les interfaces, et créer des objets d'aide, tels que R00_Model_Helper_iUnique (peut-être est un Patern commun, et il y a un nom cool, je ne pense pas " Helper 'sera cool là-bas?). Ensuite, dans R00_Model_iUnique, créez __call(), qui vérifie toutes les Interfaces d'un objet appelé et recherche une méthode appelée dans l'assistant.
Ou il y a trop de réflexion et d'autres choses lentes, n'est-ce pas?
Je pense que concevoir la classe comme une interface est un bon début. –
tu veux dire, ma solution est juste ou tu veux dire, je devrais leur faire seulement une interface et oublier leurs méthodes? –
En tant que commentaire général nommant vos classes R00_Model_ * est une mauvaise idée. J'imagine que cela signifie que vous aurez R00_View_ * et R00_Controller_ * Mais vous voyez Model, View et Controller ** ne sont pas essentiels à votre domaine de problème ** Ils sont un artefact artificiel que nous faisons en tant que développeurs pour nous aider à organiser code. Mais le but du Modèle est précisément de * modéliser * votre domaine. En évitant cette convention de dénomination, votre code sera plus facile à comprendre et à déboguer à l'avenir. – elviejo79