PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
assd
Отправлено: 19 Декабря, 2014 - 08:42:08
Post Id


Гость


Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Здравствуйте. Как можно вызвать из родителя метод наследника? Есть такой пример.

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.  


Заранее спасибо за помощь)
 
 Top
RickMan
Отправлено: 19 Декабря, 2014 - 09:01:52
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




А к чему этот пример если в нем ошибка? У родителя нет метода example. Что вы вызываете? И я не уверен, но мне кажется вызвать у родителя метод наследника невозможно, ну или по крайней мере нелогично. Тогда получается, что класс зависем и самостоятельно работать не может.
 
 Top
assd
Отправлено: 19 Декабря, 2014 - 09:10:19
Post Id


Гость


Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




В чем смысл. Наследников у меня будет штук 6 с кучей методов. Я хочу подключить в одном мести родителя и через него обращаться к методам наследников, чтобы избавиться от подключения всех классов. Можно конечно было бы запихнуть все в один класс, но тогда будет невозможно читать код + это не очень логично.
 
 Top
RickMan
Отправлено: 19 Декабря, 2014 - 09:35:10
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




*facepalm* .... меняйте логику. Это бред, создавать 6 классов которые наследуют 1 класс и при этом работать с наследуемым. Переверните логику, вы должны работать с конечным классом, тот который является самым высшим в цепочке наследовании.
 
 Top
assd
Отправлено: 19 Декабря, 2014 - 09:44:46
Post Id


Гость


Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




спасибо)
 
 Top
Sail
Отправлено: 19 Декабря, 2014 - 09:44:47
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




assd, возможно, следующая информация окажется полезной: ООП[dot] Полиморфизм
RickMan, быть может, речь идёт о сущностях авто-модели, или абстракции "геометрическая фигура" Улыбка
Впрочем, да... гадать не будем Радость
 
 Top
DelphinPRO
Отправлено: 19 Декабря, 2014 - 09:54:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 7190
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




assd пишет:
Как можно вызвать из родителя метод наследника? Есть такой пример.

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

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

Ну и чтобы не подключать классы ручками, почитайте об spl_autoload_register


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
RickMan
Отправлено: 19 Декабря, 2014 - 10:04:25
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




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


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


Постоянный участник


Покинул форум
Сообщений всего: 2752
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Полимофизм как раз таки необходим.
assd нужно наследовать от базового класса, и через какой нибудь пораждающий объект/класс создавать потомка базового типа. И работать с интерфейсом родителя, будто потомков не существует.
Как сказали выше, в пхп есть автозагрузчик.

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


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июнь 2019  


Помог: 0 раз(а)




Про позднее статическое связывание в php местные светила, похоже, не слышали.

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

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

Спойлер (Отобразить)
 
 Top
LIME
Отправлено: 11 Июня, 2019 - 19:13:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 10350
Дата рег-ции: Нояб. 2010  


Помог: 306 раз(а)




sbel а причем тут вообще статическое связывание? чет я недопонял
давай все статикой будем писать)
да и неважно
тут выше нормально пояснили что YAGNI
(Добавление)
А вообще-то тут паттерн шаблонный метод
Вполне

(Отредактировано автором: 11 Июня, 2019 - 19:16:34)



-----
DDD
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB