Maison >développement back-end >Problème PHP >Comment utiliser l'héritage multiple en PHP

Comment utiliser l'héritage multiple en PHP

(*-*)浩
(*-*)浩original
2019-09-20 14:20:192870parcourir

Comment utiliser l'héritage multiple en PHP

Je me souviens qu'il y avait une question d'entretien demandant si PHP prend en charge l'héritage multiple ?

Réponse : Non, seul l'héritage unique est pris en charge.

Comment mettre en œuvre l'héritage multiple ?

Réponse : Il peut être implémenté à l'aide d'une interface ou d'un trait. (Apprentissage recommandé : Programmation PHP du débutant à compétent)

Pourquoi pensez-vous à ce problème Parce que si une classe hérite de plusieurs interfaces, alors elles auront les mêmes attributs et méthodes. les méthodes ou les propriétés sont référencées, et qui sera remplacé ?

Résumé :

1. Utilisez l'interface pour déclarer que la classe ne peut pas être instanciée, que les attributs doivent être des constantes et que la méthode ne peut pas avoir de corps de méthode

2. La classe déclarée par le trait ne peut pas être instanciée par utilisation et écrasera les mêmes attributs et méthodes de la classe parente. S'il y a plusieurs utilisations, les suivantes écraseront les mêmes attributs et méthodes. en haut dans l'ordre

Quelle est l'interface ?

À l'aide d'une interface, vous pouvez spécifier quelles méthodes une classe doit implémenter, mais vous n'avez pas besoin de définir le contenu spécifique de ces méthodes.

L'interface est définie via le mot-clé interface, tout comme la définition d'une classe standard, mais toutes les méthodes qui y sont définies sont vides.

Toutes les méthodes définies dans l'interface doivent être publiques. C'est une caractéristique de l'interface.

Qu'est-ce qu'un trait ?

Cela ressemble à la fois à une classe et à une interface, mais ce n'est en réalité ni l'un ni l'autre Trait qui peut être considéré comme une implémentation partielle de. une classe et peut être mélangée à une ou plusieurs classes PHP existantes,

a deux fonctions : indiquer ce que la classe peut faire et fournir une implémentation modulaire.

Trait est une technologie de réutilisation de code qui fournit un mécanisme flexible de réutilisation de code pour la restriction d'héritage unique de PHP.

Trait réduit les limitations des langages d'héritage unique et permet aux développeurs de réutiliser librement des méthodes dans des classes indépendantes au sein de différentes hiérarchies. La sémantique de la combinaison de Trait et de classe définit un moyen de réduire la complexité et d'éviter les problèmes typiques liés. à l'héritage multiple traditionnel et aux classes Mixin.

Trait est similaire à Class, mais est uniquement conçu pour combiner des fonctionnalités de manière fine et cohérente. Ne peut pas être instancié via le trait lui-même. Il ajoute une combinaison de fonctionnalités horizontales à l'héritage traditionnel ; c'est-à-dire qu'il n'est pas nécessaire d'hériter entre plusieurs classes dans une application.

Priorité

Les membres hérités de la classe de base sont remplacés par les membres insérés par le trait. L'ordre de priorité est que les membres de la classe actuelle remplacent les méthodes du trait et que le trait remplace les méthodes héritées.

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
class MyHelloWorld extends Base {
    use SayWorld;

}
$o = new MyHelloWorld();
$o->sayHello();

Répertoriez plusieurs traits dans l'instruction use séparés par des virgules, et ils peuvent tous être insérés dans une classe.

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