Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вызов из родителя методов наследника
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Вызов из родителя методов наследника

Страниц (1): [1]
 

1. assd - 19 Декабря, 2014 - 08:42:08 - перейти к сообщению
Здравствуйте. Как можно вызвать из родителя метод наследника? Есть такой пример.

PHP:
скопировать код в буфер обмена
  1.  
  2. class A {
  3.     function exampleA() {
  4.         echo "I am A::example()";
  5.     }
  6. }
  7.  
  8. class B extends A {
  9.     function exampleB() {
  10.         echo "I am B::example()";
  11.         parent::example();
  12.     }
  13. }
  14.  
  15. $a = new A;
  16.  
  17. $a->exampleB();
  18.  


Заранее спасибо за помощь)
2. RickMan - 19 Декабря, 2014 - 09:01:52 - перейти к сообщению
А к чему этот пример если в нем ошибка? У родителя нет метода example. Что вы вызываете? И я не уверен, но мне кажется вызвать у родителя метод наследника невозможно, ну или по крайней мере нелогично. Тогда получается, что класс зависем и самостоятельно работать не может.
3. assd - 19 Декабря, 2014 - 09:10:19 - перейти к сообщению
В чем смысл. Наследников у меня будет штук 6 с кучей методов. Я хочу подключить в одном мести родителя и через него обращаться к методам наследников, чтобы избавиться от подключения всех классов. Можно конечно было бы запихнуть все в один класс, но тогда будет невозможно читать код + это не очень логично.
4. RickMan - 19 Декабря, 2014 - 09:35:10 - перейти к сообщению
*facepalm* .... меняйте логику. Это бред, создавать 6 классов которые наследуют 1 класс и при этом работать с наследуемым. Переверните логику, вы должны работать с конечным классом, тот который является самым высшим в цепочке наследовании.
5. assd - 19 Декабря, 2014 - 09:44:46 - перейти к сообщению
спасибо)
6. Sail - 19 Декабря, 2014 - 09:44:47 - перейти к сообщению
assd, возможно, следующая информация окажется полезной: ООП[dot] Полиморфизм
RickMan, быть может, речь идёт о сущностях авто-модели, или абстракции "геометрическая фигура" Улыбка
Впрочем, да... гадать не будем Радость
7. DelphinPRO - 19 Декабря, 2014 - 09:54:22 - перейти к сообщению
assd пишет:
Как можно вызвать из родителя метод наследника? Есть такой пример.

Такие вопросы возникают на форуме периодически. Встречный вопрос - НАФИГА???
assd пишет:
Я хочу подключить в одном мести родителя и через него обращаться к методам наследников, чтобы избавиться от подключения всех классов

Даже если бы было возможно обращение к методам наследника, КАК вы к ним обратились бы, не подключив класс? Его все равно нужно подключить, загрузить в память.

Ну и чтобы не подключать классы ручками, почитайте об spl_autoload_register
8. RickMan - 19 Декабря, 2014 - 10:04:25 - перейти к сообщению
Sail пишет:
assd, возможно, следующая информация окажется полезной: ООП[dot] Полиморфизм
RickMan, быть может, речь идёт о сущностях авто-модели, или абстракции "геометрическая фигура" Улыбка
Впрочем, да... гадать не будем Радость


полиморфизм все равно не даст возможностей которые просит ТС. Если 6 классов униследуют один и тот же класс, это не означает что я из смогу у одного экземпляра класса общаться с методами всех 6 классов. Если на пальца, то если B и C наследуют A (между B и C нет связи) то B не знает и не может значить ничего об C, а автору надо чтобы знал Однако
9. Bio man - 20 Декабря, 2014 - 03:28:44 - перейти к сообщению
Полимофизм как раз таки необходим.
assd нужно наследовать от базового класса, и через какой нибудь пораждающий объект/класс создавать потомка базового типа. И работать с интерфейсом родителя, будто потомков не существует.
Как сказали выше, в пхп есть автозагрузчик.

Зы. Затея не логичная, тебе нужны разные сущности, раз интерфейс у каждого наследника будет отличаться. Не нужно тут городить наследование и полиморфизм. Либо трейты, но использовать не советую, не разобравшись с ооп.
10. sbel - 11 Июня, 2019 - 17:11:52 - перейти к сообщению
Про позднее статическое связывание в php местные светила, похоже, не слышали.

https://www.php.net/manual/ru/la...tic-bindings.php

Появилось оно в году так 2009-2010, когда вышла версия 5.3.

Спойлер (Отобразить)
11. LIME - 11 Июня, 2019 - 19:13:20 - перейти к сообщению
sbel а причем тут вообще статическое связывание? чет я недопонял
давай все статикой будем писать)
да и неважно
тут выше нормально пояснили что YAGNI
(Добавление)
А вообще-то тут паттерн шаблонный метод
Вполне

 

Powered by ExBB FM 1.0 RC1