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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перегрузка в PHP [2]

 PHP.SU

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


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

> Описание: Overload problem
caballero
Отправлено: 11 Марта, 2013 - 12:10:41
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




Цитата:
полиморфизм это реализация в наследнике своего варианта метода

это полиморфизм в отношении классов
есть понятие полиморфизма в отношении методов класса и просто функций (как в C++)


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Zuldek
Отправлено: 11 Марта, 2013 - 12:12:17
Post Id


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


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


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




Цитата:
ну полиморфизм и перегрузка это немного разное

Это не немного разное. Перегрузка это частный случай полиморфизма. Переопределяться может конструктор, метод, свойство

(Отредактировано автором: 11 Марта, 2013 - 12:13:07)

 
 Top
LIME
Отправлено: 11 Марта, 2013 - 12:13:36
Post Id


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


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


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




да...действительно
 
 Top
armancho7777777 Супермодератор
Отправлено: 11 Марта, 2013 - 12:22:37
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




LIME пишет:
ан нет...в PHP есть и своя "перегрузка"

Сам в ах...е ))
В чём, интересно, связь между реализацией в PHP и значением слова "перегрузка" как такого ))
Что, и в каком месте перегружается?)
(Добавление)
caballero пишет:
можно притворится с помощью get_func_args или типа того

Вот именно.
(Добавление)
EuGen пишет:
случай перегрузки конструкторов объектов

Наверное, всё таки, правильней тогда, назвать это переопределением методов ?
 
 Top
LIME
Отправлено: 11 Марта, 2013 - 12:36:11
Post Id


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


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


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




правильнее это назвать разными методами...имхо
 
 Top
EuGen Администратор
Отправлено: 11 Марта, 2013 - 13:01:20
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




armancho7777777
Нет, все же перегрузка. Я понимаю неприятие этого термина в данном случае, но формально это можно так назвать (поскольку подходит под определение, но не под "классическое понимание").

На самом деле, притворяться тоже можно "грамотно", наподобие
PHP:
скопировать код в буфер обмена
  1. function foo_5e20663dadd1e483ac628951dd582ea8()
  2. {
  3.    echo('Here we have exactly 2 params with string values 0 and 0'.PHP_EOL);
  4. }
  5.  
  6. function foo_bd401ea3cf8e7413c4dca861796cc26b()
  7. {
  8.    echo('Here we have 2 string params:'.PHP_EOL);
  9. }
  10.  
  11. function foo_c81e728d9d4c2f636f067f89cc14862c()
  12. {
  13.    echo('Here we have 2 params:'.PHP_EOL);
  14. }
  15. function foo()
  16. {
  17.    $rgFunctions = array(
  18.       __FUNCTION__.'_'.md5(join("_", func_get_args())), // do we have specified overload even for arg values?
  19.       __FUNCTION__.'_'.md5(join("_", array_map('gettype', func_get_args()))), //do we have typed-overloading prototype?
  20.       __FUNCTION__.'_'.md5(count(func_get_args())), //do we have only arg count overloading prototype?
  21.    );
  22.    foreach($rgFunctions as $iPriority=>$fnFunction)
  23.    {
  24.       if(function_exists($fnFunction))
  25.       {
  26.          return call_user_func($fnFunction, func_get_args());
  27.       }
  28.    }
  29.    //some default? here assumed null:
  30.    return null;
  31. }
  32. //
  33. foo('4', '5');
  34. foo('4', false);
  35. foo(0, "0");

Еще можно все это (то есть foo_*) поместить в какой-нибудь namespace, но интерес будет лишь академическим.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 08:30:39
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




EuGen пишет:
Нет, все же перегрузка.

EuGen, вчера листал Мэтта Зандстра:
он тоже данное поведение называет переопределением методов родительского класса.
 
 Top
EuGen Администратор
Отправлено: 13 Марта, 2013 - 08:36:55
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Ну, и что же? Одно не исключает другого. Повторюсь, под строгое определение термина "перегрузка" такое поведение подходит.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 09:23:49
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




EuGen, я не спорю )
Просто читал вчера и вспомнилось, решил написать )
 
 Top
caballero
Отправлено: 13 Марта, 2013 - 09:46:17
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




все таки термины лучше не путать
переопределение каcается имплементации, то есть тела метода. а перегрузка именно перечня параметров

Override - переопределение. Overload - перегрузка


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 19:34:46
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




Вот что ещё вычитал на Хабре:
Цитата:
Реализаций полиморфизма множество, вот некоторые из них:
— чистый полиморфизм (полиморфизм по сигнатуре)
— параметрический полиморфизм (полиморфизм по имени метода)
— переопределение (абстрагирование, абстрактные классы)
— перегрузка (неполное замещение метода предка методом потомка)
 
 Top
esterio
Отправлено: 13 Марта, 2013 - 20:05:56
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




armancho7777777
Из отсюда?
http://habrahabr[dot]ru/post/147619/
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 20:42:54
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB