dimka3210
@dimka3210
web-developer

Перегрузка методов в PHP как в Java. Возможно?

В java есть такое понятие как перегрузка метода. Это значит что мы может написать один несколько методов с одним именем, которые будут отличаться кол-вом или типом входящих данных.

Например:
String getName(String fullname) {};
String getName(int id) {};
String getName(User user) {};
String getName(String firstName, String lastName) {};


В зависимости от того что мы передадим на вход, будет вызван метод подходящий по параметрам.

Программируя на PHP такого я не смог провернуть. Как минимум высыпается предупреждение
Declaration of Framework\Widget\Icon::get() should be compatible with Framework\Base\Widget::get()


Гугления по словам перегрузка приводит к какой-то псевдоперегрузке php.net/manual/ru/language.oop5.overloading.php, которую называют магией.

Вопрос собственно в том можно ли сделать например наследник-класса с методом, у которого кол-во параметров отличается от родителя и не получить предупреждение. Отключить вывод предупреждений не советовать :)

class A {
    public function message ($user, $message) {}
}
class A extends B {
        public function message ($user_id, $message, $type) {}
}
  • Вопрос задан
  • 933 просмотра
Решения вопроса 1
akubintsev
@akubintsev
Опытный backend разработчик
Нет нельзя, хотя такие пожелания насколько я помню в RFC были. Возможно в будущем появится.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@MNB
getName(){
   switch(func_num_args()){
   }
}
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Начнем с того что в пыхе нет строгой типизации, и в ней нет перезагрузки методов "из коробки". Костыли и велосипеды - вот мой ответ )
НО если функционал такой как вы написали в последних строчках - сделайте параметры необязательными
public function message ($user_id, $message="", $type="someDefaultType") {}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы