-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
|
1 | |
Полиморфизм в PHP05.02.2017, 19:07. Показов 2496. Ответов 23
В книге по ПХП,где авторы Люк Веллинг,Лора Томпсон "Разработка веб-приложений с помощью ПХП и Msql"
упоминается ,что Полиморфизм-это скорее характеристика поведения,нежели обьектов. В ПХП полиморфными могут быть только функции-члены класса. ====== 1)И тут возник вопрос--означает ли такое утверждение в книге,что в ПХП можно перегружать методы? 2)И если перегрузка методов в ПХП невозможна,то каким способом реализуется принцип полиморфности? Например, в C# полиморфизм воплощается через использование перегрузки методов. (совместное использование одного и того же имени двумя или более методами одного и того же класса, при условии, что их параметры объявляются по-разному. В этом случае говорят, что методы перегружаются, а сам процесс называется перегрузкой методов. Перегрузка методов относится к одному из способов реализации полиморфизма в C#.)
0
|
05.02.2017, 19:07 | |
Ответы с готовыми решениями:
23
полиморфизм Полиморфизм Полиморфизм Полиморфизм |
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
05.02.2017, 19:23 | 2 |
0
|
05.02.2017, 19:31 | 3 |
Сообщение было отмечено TVPNERO как решение
Решение
Нет. Перегрузка это один из частных случаев полиморфизма. В PHP данный механизм не поддерживается, но частично "эмулируется" с помощью параметров по умолчанию.
В C# помимо перегрузки существует переопределение методов, которое, на мой взгляд, играет не меньшую, а может даже и большую роль в полиморфизме. Сказанное о переопределении имеет отношение и к PHP.
Добавлено через 7 минут Добавлю, что переопределение относится как к полиморфизму, так и к наследованию и без последнего невозможно.
1
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
|
05.02.2017, 19:49 [ТС] | 4 |
Kerry_Jr, а что такое переопределение?
Добавлено через 1 минуту Kerry_Jr, значит в книге где есть утверждение что функции в ПХП -полиморфные имеется ввиду переопределение?
0
|
05.02.2017, 20:35 | 5 | |||||
Переопределение, хм... На примере
1
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
|
05.02.2017, 22:13 | 6 |
А можно это как-то прокомментировать подробнее?
Ведь полиморфизм: один интерфейс - несколько реализаций. А перегруженные методы - это разные методы, несмотря на одинаковое имя, т.е. уже теряется единый интерфейс.
0
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
||||||
07.02.2017, 15:40 [ТС] | 8 | |||||
Kerry_Jr, Спасибо за разьяснение.
А можете ли вы продемонстрировать как например "эмулировать " перезагрузку методов в ПХП. на таком примере с C# https://professorweb.ru/my/csh... l6/6_1.php (на этом ресурсе взял пример перезагрузки методов)
0
|
07.02.2017, 16:11 | 9 | |||||
TVPNERO,
1
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
|
07.02.2017, 17:53 [ТС] | 10 |
Kerry_Jr, Спасибо.
Добавлено через 10 минут Kerry_Jr, а переменная $result которая находиться в блоках с if{} и переменная $result которая находится просто внутри метода $result = "Пустой метод\n"; это разные локальные переменные или это одна и та же переменная ,которая динамически меняет свое значение ?
0
|
07.02.2017, 17:56 | 11 |
TVPNERO, это чуть чуть некорректный вариант, но для примера сойдет. Некорректный, потому что если первым параметром передать
null , то вывод будет некорректным.Добавлено через 57 секунд это
1
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
|
07.02.2017, 18:00 [ТС] | 12 |
Kerry_Jr,Благодарю.
Но в реальности,такой подход можно использовать? Добавлено через 1 минуту Kerry_Jr, и что вместо null лучше использовать?(если есть такой вариант конечно)
0
|
07.02.2017, 18:34 | 13 | |||||
В реальности вместо
null задаются реальные значения.
1
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
||||||||||||||||
07.02.2017, 23:13 [ТС] | 14 | |||||||||||||||
Kerry_Jr, Спасибо.
Добавлено через 3 часа 13 минут Kerry_Jr, я еще пробовал так оставить(то есть без значений null ) но вылазит ошибка
Kerry_Jr, ну и последнее. а для чего после переменной
0
|
08.02.2017, 20:09 | 15 |
Вы взялись за ООП, не зная таких фундментльных вещей?! Это конкатенация + присваивание, иначе добавление значения в конец данной строки.
Добавлено через 6 минут Я так думаю, здесь? Добавлено через 2 минуты Я сказал, что подставляются реальные значения, которые должны быть использованы по умолчанию, если данный параметр не указан при вызове. Т.е. нежно null не убирать, а заменить на значение, которое будет использовано поумолчанию (собственно, это и называется параметром по умолчанию)Добавлено через 1 час 28 минут
1
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
|
08.02.2017, 20:18 [ТС] | 16 |
Kerry_Jr, если убрать все точки в result,то выводится только возраст обьектов.А почему именно возраст показывает а другие переменные result с именем обьекта и фамилией нет?
0
|
08.02.2017, 20:27 | 17 |
TVPNERO, это на самом деле уже не смешно, это азы PHP, рановато вы начали с ООП, перегрузки методов и пр. Если убрать точку, то переменная
$result будет перезаписывать. Если же точка есть, то к уже имеющемуся значению приклеиться следующее.
1
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
|
08.02.2017, 22:46 [ТС] | 18 |
Kerry_Jr, просто не понимаю почему именно возраст выводит в таком случае,а не что либо другое(имя например)
0
|
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
|
|
09.02.2017, 14:45 [ТС] | 20 |
Kerry_Jr,
А разве скрипт считываеться не сверху вниз? Если сверху вниз--то по идее должно быть name.
0
|
09.02.2017, 14:45 | |
09.02.2017, 14:45 | |
Помогаю со студенческими работами здесь
20
Полиморфизм Полиморфизм Полиморфизм. Полиморфизм :( Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |