PHP
Если в PHP нет перегрузки методов, то как же быть?
Если я хочу, чтобы метод мог принимать разное количество аргументов, то мне создавать методы с разными названиями? В Java же можно просто перегрузить метод и не париться.
Я не спец по PHP и если ты не туп, то ты это уже понял, когда я втирал про неконстантные ссылки, но не смог объяснить, как оно работает внутри.
И тут стоит отметить, что в JavaScript тоже нет перегрузки функцийt. И в Си (но не C++!).
А в TypeScript она есть:
https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads
но по сути тоже является просто костылем по проверке аргументов на undefined, и немного синтаксического сахара.
А значит, и в PHP тоже можно подобное делать. Пишешь единую функцию и в ней каскад if'ов.
Хотя реально перегруженные функции как-то мало используют хоть в JS, хоть в C++. И уж тем более это плохо в PHP, с которым часто работают в блокнотах, а перегруженные функции для блокнота жутко неудобны. Поэтому лучший ответ: НИКАК, НАXYЙ. Как-то избегать.
И тут стоит отметить, что в JavaScript тоже нет перегрузки функцийt. И в Си (но не C++!).
А в TypeScript она есть:
https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads
но по сути тоже является просто костылем по проверке аргументов на undefined, и немного синтаксического сахара.
А значит, и в PHP тоже можно подобное делать. Пишешь единую функцию и в ней каскад if'ов.
Хотя реально перегруженные функции как-то мало используют хоть в JS, хоть в C++. И уж тем более это плохо в PHP, с которым часто работают в блокнотах, а перегруженные функции для блокнота жутко неудобны. Поэтому лучший ответ: НИКАК, НАXYЙ. Как-то избегать.
Andrey Stefanishin
Зачем избегать? Я в Java сто раз так делал.
Вариант 1: да, сделать методы с разными названиями.
Вариант 2: задать для параметров метода значения по умолчанию и анализировать значения этих параметров.
Вариант 3: сделать метод с произвольным кол-вом параметров и анализировать кол-во и типы параметров.
Вариант 4 (для PHP 8): использовать именованные параметры.
Подробности вариантов 2-4: https://www.php.net/manual/ru/functions.arguments.php
P.S. Если перегрузка операций может иметь смысл (для упрощения записи выражений), то перегрузка функций - если это не конструкторы классов - никакого смысла не имеет: да, придётся использовать больше имён, но кол-во кода не меняется, а вероятность ошибок уменьшается - при использовании типизированных параметров.
Вариант 2: задать для параметров метода значения по умолчанию и анализировать значения этих параметров.
Вариант 3: сделать метод с произвольным кол-вом параметров и анализировать кол-во и типы параметров.
Вариант 4 (для PHP 8): использовать именованные параметры.
Подробности вариантов 2-4: https://www.php.net/manual/ru/functions.arguments.php
P.S. Если перегрузка операций может иметь смысл (для упрощения записи выражений), то перегрузка функций - если это не конструкторы классов - никакого смысла не имеет: да, придётся использовать больше имён, но кол-во кода не меняется, а вероятность ошибок уменьшается - при использовании типизированных параметров.
Andrey Stefanishin
Не понял как сделать вариант 3.
В Java всё итак работало без подпирания костылями.
В Java всё итак работало без подпирания костылями.
Похожие вопросы
- Почему в качестве колбеков в PHP передаются методы (функции), а не объекты?
- PHP Polling ChatGPT
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Не работает PHP include на хостинге
- Хеширование пароля php
- Здравствуйте, каким методом лучше проверять на PHP правильность открывающихся и закрывающихся скобок в строке?
- Подскажите хороший курс по PHP практике?
- Пишу авторизацию (php). Куки не работают
- Вопрос начинающего программиста Python\PHP
- Как в PHP указать тип переменной unsigned int?