У меня есть система моделей:Эмуляция множественного наследования в 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 { }
Там собирается быть R00_Model_iCommentableUnique и R00_Model_Post хочет быть унаследован от него. Но это невозможно, оно уже унаследовано от R00_Model_iTaggedUnique, и я не думаю, что умно унаследовать R00_Model_iTaggedUnique от R00_Model_iCommentableUnique или наоборот. Я придумал только одну идею, как ее реализовать, но у меня есть некоторые сомнения. Может быть, вы можете рассказать мне о некоторых умных методах или критиковать этот метод?
Я придумал сделать R00_Model_i * Уникальным не классы, а интерфейсы, а также создавать вспомогательные объекты, такие как R00_Model_Helper_iUnique (возможно, это общий лаковое, и есть классное имя, я не думаю, что " Помощник будет там круто?). Затем в R00_Model_iUnique создайте __call(), который проверяет все интерфейсы вызываемого объекта и ищет вызываемый метод в помощнике.
Или слишком много отражений и других злых медленных вещей, не так ли?
Я думаю, что создание класса в качестве интерфейса - это хорошее начало. –
Вы имеете в виду, мое решение правильно, или вы имеете в виду, я должен сделать их только интерфейсами и забыть о своих методах? –
Как общий комментарий, назвавший ваши классы R00_Model_ * - плохая идея. Я предполагаю, что это означает, что у вас будут R00_View_ * и R00_Controller_ * Но вы видите, что Model, View и Controller ** не являются существенными для вашей проблемной области ** Это искусственный артефакт, который мы, как разработчики, делаем, чтобы помочь нам организовать код. Но цель Модели - именно * модель *, что ваш домен. Избегая этого соглашения об именах, ваш код будет проще в будущем понимать и отлаживать. – elviejo79