Ответ
В PHP нет перегрузки методов (method overloading) в классическом виде, как в Java или C++, где можно определить несколько методов с одним именем, но разными сигнатурами параметров.
Однако есть два подхода для достижения похожего поведения:
-
Использование магических методов
__call()и__callStatic(): Они перехватывают вызовы несуществующих методов.class MathOperations { public function __call($name, $arguments) { if ($name === 'sum') { // Эмулируем перегрузку: sum() может принимать разное число аргументов return array_sum($arguments); } throw new BadMethodCallException("Method $name does not exist."); } } $math = new MathOperations(); echo $math->sum(1, 2); // 3 echo $math->sum(1, 2, 3, 4); // 10 -
Методы с аргументами по умолчанию и вариадическими функциями: Можно создать один метод, который обрабатывает разные случаи.
class Formatter { // Один метод обрабатывает разные сценарии public function format($data, string $style = 'default') { if (is_array($data)) { return $this->formatArray($data, $style); } if (is_numeric($data)) { return $this->formatNumber($data, $style); } return (string) $data; } // ... приватные методы formatArray, formatNumber }
Начиная с PHP 8, с объединёнными типами (union types) и именованными аргументами (named arguments) возможности для создания гибких API стали ещё лучше, уменьшив практическую необходимость в классической перегрузке.