Перевантаження методів з типами в PHP 8.0 та вище. Як це має бути.

З PHP 7.4 ми маємо типи, і я відчуваю, що програмую в таких мовах, як Java або C#, що дуже приємно, але потім я помітив, що не можу перевантажити свої методи так, як я звик у інших проєктах з типізованими мовами.

pic

Рішення, запропоновані на 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.

Leave a Reply

Your email address will not be published. Required fields are marked *