Maison >développement back-end >tutoriel php >Méthodes de surcharge avec des types en PHP et supérieur. Comme ça devrait être.
PHP 7.4 introduit des astuces de type, ce qui rend l'expérience de programmation PHP plus proche de langages comme Java ou C#, ce qui est génial ! Cependant, j’ai découvert que je ne pouvais pas surcharger les méthodes comme je le fais dans d’autres projets de langage typé.
Les solutions fournies sur Stack Overflow n'étaient pas satisfaisantes, j'ai donc réfléchi à la manière de surcharger les méthodes de la manière la plus efficace et la plus concise, et j'ai créé une bibliothèque de support pour cela. Je voulais le partager avec vous car c'est peut-être la meilleure solution que vous puissiez trouver. Vous pouvez l'obtenir sur GitHub et en savoir plus.
Je pense que l'extrait de code court ci-dessous est suffisant pour comprendre comment cela fonctionne.
<code class="language-php">$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]);</code>
<code class="language-php">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); }</code>
Ceci est mon premier message, dites-moi s'il vous plaît si tout va bien. Si vous avez des questions, n'hésitez pas à les poser.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!