Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 [2] 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Перегрузка методов
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 1 день
Карма: 70




sergeiss
Цитата
Ни в коем случае!!! Все "перегруженные" методы с одним названием относятся к одному классу. И, соответственно, к одному экземпляру одновременно.

А как бы примерно это могло выглядеть на php?

$Test = new Test();
$Test->display(['юху']); // принимает массив, возвращает результат
$Test->display (object $object) {
// как то на лету перегружаем метод
}
$Test->display((object)['юху']); // принимает объект


В таком случае есть анонимные функции.

AllesKlar
Да это не пример удобства, это пример как вызывать.
Пример - это решение придуманной или реальной задачи.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11783
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 9 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 9 дней


Цитата (Arh @ 10.11.2016 - 18:32)
А как бы примерно это могло выглядеть на php?


class StringBuilder {

public function append(StringBuilder $stringBuilder) {
$this->string += $stringBuilder->toString();
}

public function append(string $string) {
$this->string += $string;
}

}


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 1 день
Карма: 70




Invis1ble
Не понял. Типа как с переменными, новый код перезапишет старый?
$a = 1;
$a = 2;


class StringBuilder {

/*public function append(StringBuilder $stringBuilder) {
$this->string += $stringBuilder->toString();
}*/


public function append(string $string) {
$this->string += $string;
}

}


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 6 дней
Карма: 170




Цитата (Arh @ 10.11.2016 - 16:32)
AllesKlar
Да это не пример удобства, это пример как вызывать.
Пример - это решение придуманной или реальной задачи.


What? :blink:
Ну вот еще
public function int max(int a, int b) { 
return a > b ? a : b;
}

public function int max(int a, int b, int c) {
return max(max(a,b), c);
}


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

Нет одного конкретного примера.
Это тоже самое, что спросить, зачем использовать молоток - хочешь, гвозди ломай, хочешь, камни долби, хочешь в бубен бей, хочешь, головы проламывай.
Молоток - это мощный многофункциональный инструмент.

Цитата (Arh)
Invis1ble
Не понял. Типа как с переменными, новый код перезапишет старый?


Нет, класс посмотрит на вызываемую функцию (имя, количество параметров и их типы) - это сигнатура функции.
если у него есть подходящая сигнатура, то он вызовет ее.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 1 день
Карма: 70




AllesKlar
Цитата
класс посмотрит на вызываемую функцию (имя, количество параметров и их типы) - это сигнатура функции.
если у него есть подходящая сигнатура, то он вызовет ее.

во)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 1 день
Карма: 70




AllesKlar
Цитата
Это тоже самое, что спросить, зачем использовать молоток

Ну тут пример "гвозди забивать")
А ты показываешь как держать, а чё с ним делать хз)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Вообще, если в ПХП (как и в JS) требуется сделать некий универсальный метод или функцию, чтобы принимали разные параметры, достаточно чуть-чуть расширить начальные условия :) Или, иными словами, посмотреть на это всё с немного другой точки зрения.
"Перегруженные" функции принимают параметры разного типа. Но в ПХП и в JS мы можем передать ассоциативный массив (ПХП) или объект (JS) в качестве параметра!!! Получим, по сути, тот же функционал, что и с перегруженными методами/функциями.

Примеры, совершенно абстрактные. Вызываем одну и ту же функцию, но в зависимости от параметров она может делать как что-то одинаковое, так и разные веще.
// PHP
setSomething( [ 'id' => 5] );
setSomething( [ 'first_name' => 'New name'] );
setSomething( [ 'first_name' => 'First name', 'last_name' => 'Last name'] );


// JS
doSomething( { id: 5 } );
doSomething( { first_name: 'New name' } );
doSomething( { first_name: 'First name', last_name: 'Last name' } );


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 1 день
Карма: 70




sergeiss
Можно и через

class Test {

function get (...$arg) {

if (count($arg) == 1 && is_string($arg[0])) {
return $this->stringTest(...$arg);
} elseif (count($arg) == 1 && is_array($arg[0])) {
return $this->arrayTest(...$arg);
} elseif (count($arg) == 2 && is_array($arg[0]) && is_array($arg[1])) {
return $this->arraysTest(...$arg);
}

}


function stringTest (string $string) {
return 'строка';
}

function arrayTest (array $array) {
return 'массив';
}

function arraysTest (array $array1, array $array2) {
return 'два массива';
}

}


$Test = new Test();
print_r($Test->get('привет'));
print_r($Test->get([1]));
print_r($Test->get([1], [2]));


Но я думал тут типа наследования, потому что bestxp сказал про OpenClosed, типа "не править код".



--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 16 дней
Карма: 5




Цитата (sergeiss @ 10.11.2016 - 21:00)
Вообще, если в ПХП (как и в JS) требуется сделать некий универсальный метод или функцию, чтобы принимали разные параметры, достаточно чуть-чуть расширить начальные условия :) Или, иными словами, посмотреть на это всё с немного другой точки зрения.
"Перегруженные" функции принимают параметры разного типа. Но в ПХП и в JS мы можем передать ассоциативный массив (ПХП) или объект (JS) в качестве параметра!!! Получим, по сути, тот же функционал, что и с перегруженными методами/функциями.

Примеры, совершенно абстрактные. Вызываем одну и ту же функцию, но в зависимости от параметров она может делать как что-то одинаковое, так и разные веще.
// PHP
setSomething( [ 'id' => 5] );
setSomething( [ 'first_name' => 'New name'] );
setSomething( [ 'first_name' => 'First name', 'last_name' => 'Last name'] );


// JS
doSomething( { id: 5 } );
doSomething( { first_name: 'New name' } );
doSomething( { first_name: 'First name', last_name: 'Last name' } );

Как по мне - это не есть гуд.
Все равно придется делать кучу телодвижений (проверок/кастов). Если мы ждали число, а пришла строка - будет бяка.

Порадовал php7 с хинтами.
Как-то видел предложение с жесткой типизацией, уже написано все, но почему-то отказались вливать.
Может позже добавят.

Один из огромных бонусов перегрузки - перегрузка конструкторов, очень не хватает.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Аццкая хрень
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5475
Пользователь №: 32538
На форуме: 4 года, 6 месяцев, 7 дней
Карма: 49




Another Reality
принудительной жесткой типизацией? Если да - нахрен не нужна такая тема!
Нужен выбор.


На тему конструкторов - ты на 100% прав!


--------------------
Правда тоже ложь, но с иным углом.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 16 дней
Карма: 5




Цитата (Zzepish @ 11.11.2016 - 13:08)
принудительной жесткой типизацией? Если да - нахрен не нужна такая тема!
Нужен выбор.


На тему конструкторов - ты на 100% прав!

Не принудительно, опционально.
Но даже если была бы исключительно жесткая типизация - я только ЗА. Все стало бы намного стабильнее и к тому же работало бы в разы быстрее.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Аццкая хрень
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5475
Пользователь №: 32538
На форуме: 4 года, 6 месяцев, 7 дней
Карма: 49




Another Reality
думаешь - вся тормознутость из-за типизации?


--------------------
Правда тоже ложь, но с иным углом.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14965
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 26 дней
Карма: 443




Я вам так скажу, коллеги-программисты. Если кому-то очень хочется работать в вебе, но с жесткой типизацией, вэлкам в мир Java smile.gif


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 16 дней
Карма: 5




Цитата (Zzepish @ 12.11.2016 - 21:14)
Another Reality
думаешь - вся тормознутость из-за типизации?

Нет, но дает свое.

Цитата (sergeiss @ 12.11.2016 - 21:27)
Я вам так скажу, коллеги-программисты. Если кому-то очень хочется работать в вебе, но с жесткой типизацией, вэлкам в мир Java smile.gif


Мне как-то предлагали работу в одной компании, правда не Java, а .Net (сказали, что моих знаний на джуна должно хватить). Но я отказался, хотя штука отличная, ибо Java и .Net - это приговор - навсегда сидеть в офисе и поддерживать легаси код (особенно Java) ибо фриланса там 0, и все что светит - это месяц отпуска в год, и то, если отпустят. А я всегда хотел иметь возможность по желанию сменить вид за окном без ущерба работе. Для меня это важнее чем +500 уе к зарплате.

Но при этом я бы хотел чтобы данная технология росла, пускай это будет опционально.
Собственно, все движется к этому.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11783
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 9 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 9 дней




--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 [2] 3  Ответ в темуСоздание новой темыСоздание опроса