Maison >développement back-end >tutoriel php >Méthodes de surcharge avec des types en PHP et supérieur. Comme ça devrait être.

Méthodes de surcharge avec des types en PHP et supérieur. Comme ça devrait être.

Barbara Streisand
Barbara Streisandoriginal
2025-01-10 14:05:41969parcourir

Overloading methods with types in PHP  and above. The way it should be.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn