PHP

Если в PHP нет перегрузки методов, то как же быть?

Если я хочу, чтобы метод мог принимать разное количество аргументов, то мне создавать методы с разными названиями? В Java же можно просто перегрузить метод и не париться.
AS
Andrey Stefanishin
21 258
Я не спец по PHP и если ты не туп, то ты это уже понял, когда я втирал про неконстантные ссылки, но не смог объяснить, как оно работает внутри.

И тут стоит отметить, что в JavaScript тоже нет перегрузки функцийt. И в Си (но не C++!).

А в TypeScript она есть:
https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads
но по сути тоже является просто костылем по проверке аргументов на undefined, и немного синтаксического сахара.

А значит, и в PHP тоже можно подобное делать. Пишешь единую функцию и в ней каскад if'ов.

Хотя реально перегруженные функции как-то мало используют хоть в JS, хоть в C++. И уж тем более это плохо в PHP, с которым часто работают в блокнотах, а перегруженные функции для блокнота жутко неудобны. Поэтому лучший ответ: НИКАК, НАXYЙ. Как-то избегать.
НН
Николай Некрашевич
92 464
Лучший ответ
Andrey Stefanishin Зачем избегать? Я в Java сто раз так делал.
Вариант 1: да, сделать методы с разными названиями.

Вариант 2: задать для параметров метода значения по умолчанию и анализировать значения этих параметров.

Вариант 3: сделать метод с произвольным кол-вом параметров и анализировать кол-во и типы параметров.

Вариант 4 (для PHP 8): использовать именованные параметры.

Подробности вариантов 2-4: https://www.php.net/manual/ru/functions.arguments.php

P.S. Если перегрузка операций может иметь смысл (для упрощения записи выражений), то перегрузка функций - если это не конструкторы классов - никакого смысла не имеет: да, придётся использовать больше имён, но кол-во кода не меняется, а вероятность ошибок уменьшается - при использовании типизированных параметров.
Игорь Озорнин
Игорь Озорнин
95 276
Andrey Stefanishin Не понял как сделать вариант 3.
В Java всё итак работало без подпирания костылями.