Maison  >  Article  >  développement back-end  >  Comment faire un chaînage de méthodes pour les interfaces ?

Comment faire un chaînage de méthodes pour les interfaces ?

PHPz
PHPzavant
2024-02-13 08:39:08865parcourir

Comment faire un chaînage de méthodes pour les interfaces ?

L'éditeur PHP Xiaoxin vous présente une introduction sur la façon d'implémenter le chaînage de méthodes pour les interfaces. Le chaînage de méthodes est une méthode de programmation élégante qui peut appeler en continu plusieurs méthodes dans une seule instruction, améliorant ainsi la simplicité et la lisibilité du code. Dans cet article, nous présenterons en détail les conseils et précautions sur la façon d'implémenter le chaînage de méthodes pour les interfaces afin de vous aider à mieux appliquer la programmation en chaîne de méthodes et à améliorer l'efficacité et la maintenabilité de votre code. Explorons ensemble !

Contenu de la question

Je veux faire quelque chose comme obj.withx().withy().withz() 的事情。 obj qui peut avoir différents types, c'est pourquoi j'utilise des interfaces.

Malheureusement obj 也可以是 nil. Dans ce cas, mon chaînage de méthodes va paniquer car j'appelle une méthode sur une interface nulle et je ne sais pas quelle méthode appeler.

Voici l'exemple minimal reproductible

Comment continuer à utiliser le chaînage de méthodes sur des objets qui peuvent être nil ?

  • Existe-t-il un moyen de fournir des implémentations par défaut pour withx() et d'autres fonctions ?
  • J'ai également envisagé un modèle où chaque fonction d'attribut renvoie une fonction, mais cela semble trop complexe
obj.WithX().WithY()    // of type func() myInterface
obj.WithX().WithY()()  // now I got the actual object.

Solution de contournement

Ces commentaires pour la plupart sont corrects, mais en fait, vous ne pouvez pas renvoyer un nil non typé.

func new(someParam bool) inter {
    // more complicated. May return A, B or nil
    if someParam {
        return &A{}
    }
    var b *B
    return b // which is nil, but of a type that implements the interface
}

https://www.php.cn/link/845c31a2fbc3d2e14ecb17d48dcc65a4

Donc, en gros, vous avez juste besoin d'un type "par défaut", qui peut être nul et qui implémente toujours l'interface.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer