![]() |
aggregate() in PHP5
Вобщем изначально проблема в том что меня очень сильно угнетает отсутствие множественного наследования (multiple inheritance) в PHP.
А все-таки разделить логически код очень хочется, ну очень не нравится мне все в кучу кидать. Ну вот, поспрашивал, почитал, понравился мне способ с агрегированием, естественно решил попробовать, начал с изменения (а потом и оригинал) примера с вушеуказанной страницы МАНа и получил сразу: PHP код:
Вопрошая по сему факту гугла, наткнулся на обсуждение этой проблемы, ответов и решений там правда нету, но как я понял из дальнейших поисков это не поддерживается в PHP5. Может кто-то подскажет как можно прикрутить к нему эти возможности? Ну там ключ сборки, или где-то доступно расширение, настройки может быть... Ну И (или) дополнительный вопрос: Какими еще путями можно сделать аналог множественного наследования? Пожалуйста с короткими (пару строк) описаниями плюсов/минусов/ограничений и желательно где можно про это подробнее почитать, посмотреть примеры (или свои, если есть). Заранее всем благодарен. |
Имхо, прикручивать к языку то, что в нем концептуально не поддерживается - зло и прямой путь к самоубийству. Но это, ессно, мое пуристское имхо 8))
А если по теме - то, думаю, стоит обратить внимание на интерфейсы и подумать, а на самом ли деле тебе так уж нужно множественное наследование (или, может, просто стоить изменить дизайн и устранить необходимость в нем?). Multiple Inheritance and Interfaces OOL basics - Use interfaces for safe multiple inheritance and a great deal more |
А нужно ли в задаче использовать множественное наследование ? Ведь априори без него можно почти всегда обойтись. Либо же интерфейсы путь к решению проблемы. Например в том же C# наследование поддерживается множественное только от интерфейсов. Безусловно это только моё мнение
|
Цитата:
Цитата:
Цитата:
knight, на твое поддакивание позволь не отвечать, все в той же мере что ответил Выше ) А по указанным ссылкам про Java и С++ а не про PHP, я знаю что в них разрешено множественное наследование, вот этого же я и хочу. |
Цитата:
Цитата:
Multiple inheritance in Java Цитата:
Цитата:
Но лучше, конечно, читать только заголовки через слово - не дай бог кто просветить опять попытается 8)))))) PS: возвращаясь же к твоей aggregate(): PHP: aggregate - Manual Цитата:
|
Прошу прощения, про Java'у я конечно же ошибся.
Но это нормально поддерживают C++ и JavaScript Цитата:
Множественное наследование интерфейсов мало чего дает для наследования классов (имплементации): Цитата:
P.S. Почему вместо ответа на вопрос чаще всего начинают с того что этого автору совсем не нужно делать, вместо помощи КАК это сделать? Ну или уж хотябы предложения как это сделать альтернативным способом... |
Цитата:
Цитата:
|
Цитата:
Saruman, а вот ты говоришь, ты можешь привести реальные доводы чем множественное наследование плохо так уж? Почему на него никто не жалуется в JavaScript и С++, но повсеместно кричат что это лишнее в PHP??? |
Цитата:
Цитата:
Цитата:
Если хочешь конкретики - то дизайн в студию и будем уже тыкать пальцами и рассуждать о конкретных решениях. Существует вероятность, что я и признаю твою правоту в данном конкретном случае. |
Цитата:
|
Кста, дописывая очередной тест, понял еще один недостаток MI и преимущество композиции. Если исходить из того, что тестами должен быть покрыт весь код (что логично, т.к. если суперкласс проходит набор тестов, это еще не значит, что аналогичные тесты будут 100% проходит и в субклассе), то при написании юнит теста для субкласса мы должны также полностью покрыть всю функциональность, наследуемую им от родителей. При этом, если дальнейшие изменения в суперклассах нарушат тесты данного субкласса, то не очевидно, изменения в каком из них привели к этому, т.к. все суперклассы имеют влияние на результаты тестов.
Если же мы использует композицию, то просто заменяем вложенный класс стабом/моком и забываем про изменения в нем. До тех пор, пока интерфейсные методы этого класса проходят тесты на заявленную функциональность, любые изменения в нем не приведут к нарушениям в использующих его классах. Это не считая того, что таким образом мы сокращаем объем необходимых тестов. |
| Часовой пояс GMT +4, время: 09:13. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.