З PHP 7.4 ми маємо типи, і я відчуваю, що програмую в таких мовах, як Java або C#, що дуже приємно, але потім я помітив, що не можу перевантажити свої методи так, як я звик у інших проєктах з типізованими мовами.
Рішення, запропоновані на StackOverflow, є неприпустимими, тому я задумався, як найефективніше та найчистіше перевантажити методи та створив бібліотеку для підтримки цього. Хочу поділитися нею з вами, тому що це найкраще, що я зміг знайти. Ви можете отримати її на GitHub і дізнатися більше.
Я думаю, що короткий фрагмент коду нижче достатній, щоб зрозуміти, як це працює.
$userRepository = new UserRepository();
$userRepository->add('Micheal', 'Jordan', 23);
$userRepository->add('Micheal Jordan', 23);
$userRepository->add(new User("Micheal", "Jordan", 23));
$userRepository->add(new UserDto("Micheal", "Jordan", 23));
$userRepository->add(['fist_name' => 'Micheal', 'last_name' => 'Jordan', 'number' => 23]);
public function add(mixed ...$args): void
{
$addMethodOverloader = MethodOverloader::create($this)
->register($this->addByFirstNameLastNameAndNumber(...),'string', 'string', 'int')
->register($this->adddByUser(...), User::Class)
->register($this->addByUserDto(...), UserDto::class)
->register($this->addByArray(...), 'array')
->register($this->addNyNameAndNumber(...), 'string', 'int')
->onFailure(function() {
throw new MyCustomException();
});
$addMethodOverloader->invoke($args);
}
Дайте знати, якщо вам сподобалося і ви вважаєте, що це корисно.
Перекладено з: Overloading methods with types in PHP 8.0 and above. The way it should be.