Intereting Posts
Проверьте, существует ли значение перед вставкой в ​​MySQL DB в скрипте PHP Как и зачем использовать фигурные скобки: return $ this -> {$ this-> action} (); Ограничение левого соединения для возврата одного результата? PHP «Истек срок действия документа» после использования кнопки «Назад» Отправить JSON-файл из jQuery на PHP без AJAX Пример использования MySQL LEFT JOIN Почему односторонний доступ к функциям считается плохой привычкой? как передать значение php из одного файла в другой через java-скрипт Преобразование совпадений регулярного выражения в многомерный массив Справка PHP-алгоритма PHP MYSQL Спотизировать автоматическое управление списком воспроизведения с помощью PHP-back-end и ограничений по скорости php: удалить скобки / содержимое из строки? Установка переменной POST без использования формы почему ini_set ('session.gc_maxlifetime', 60) не работает? Драйвер PDO MySQL на Mac

Эмулировать множественное наследование в 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 (), который проверяет все интерфейсы вызываемого объекта и ищет вызываемый метод в помощнике.

Или слишком много отражений и других злых медленных вещей, не так ли?

Related of "Эмулировать множественное наследование в php"

Вы находитесь в правильном направлении, используя интерфейс и помощники (состав).

Это как раз и одна из причин того, почему из принципов книги шаблонов проектирования (GoF) является «Предпочтительная композиция над наследованием» .

Композиция предоставит вам гибкость, которую вы должны использовать для разных классов. В том классе, который вам нужен.