Maison >développement back-end >Problème PHP >Quelle est la différence entre une classe abstraite et une interface en php

Quelle est la différence entre une classe abstraite et une interface en php

青灯夜游
青灯夜游original
2020-10-30 16:47:432995parcourir

Différences : 1. Les classes abstraites peuvent avoir des attributs, des méthodes ordinaires et des méthodes abstraites, mais les interfaces ne peuvent pas avoir d'attributs, de méthodes ordinaires et peuvent avoir des constantes 2. Les classes abstraites sont déclarées avant la classe avec le mot-clé abstract ; , et have Class est déclaré comme une classe, et l'interface est déclarée avec interface, mais elle ne peut pas être déclarée avec class, car l'interface n'est pas une classe.

Quelle est la différence entre une classe abstraite et une interface en php

Recommandé : "Tutoriel vidéo PHP"

Pour le développement orienté objet, les classes abstraites et les interfaces C'est plus difficile à comprendre. L'article suivant vous présentera la différence entre les classes abstraites et les interfaces en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Classe abstraite : elle est basée sur une classe. C'est une classe en soi et ne peut pas être directement instanciée dans la classe. Semblables aux modèles, après spécification, les sous-classes peuvent implémenter des fonctions détaillées.

Interface : Principalement basée sur les spécifications de méthodes, un peu comme les méthodes abstraites dans les classes abstraites, sauf qu'elle est plus indépendante que les méthodes abstraites. Une classe peut être combinée pour former une nouvelle classe en combinant plusieurs méthodes.

La différence entre les classes abstraites et les interfaces en php

1 Les classes abstraites peuvent avoir des attributs, des méthodes communes et des méthodes abstraites, mais les interfaces ne peuvent pas avoir d'attributs, de méthodes communes. , et peut Il y a des constantes

2. Il peut ne pas y avoir de méthodes abstraites dans les classes abstraites, mais il doit y avoir des méthodes "abstraites" dans les interfaces

3 Il y a des différences de syntaxe

.

4. Classes abstraites Utilisez le mot-clé abstract pour déclarer avant la classe, et la classe est déclarée comme une classe. L'interface est déclarée avec interface, mais ne peut pas être déclarée avec class, car l'interface n'est pas une classe.

5. La méthode abstraite d'une classe abstraite doit être déclarée avec abstract, mais l'interface n'a pas besoin de l'être

6. Une classe abstraite utilise le mot-clé extends pour permettre à la sous-classe d'hériter. la classe parent. Les classes implémentent des méthodes abstraites détaillées. L'interface utilise des implémentations pour permettre aux classes ordinaires d'implémenter des méthodes détaillées de l'interface dans la classe, et l'interface peut implémenter plusieurs méthodes à la fois. Utilisez des virgules pour séparer chaque interface

Classe abstraite :

  • La classe abstraite ne peut pas être instanciée, son rôle est de définir (ou implémenter partiellement) l'interface pour toutes les classes qui en héritent.

  • Utilisez le mot-clé abstract pour définir une classe abstraite.

  • Les méthodes et propriétés peuvent être créées dans des classes abstraites comme dans les classes ordinaires. Dans la plupart des cas, une classe abstraite contient au moins une méthode abstraite. Les méthodes abstraites sont également transmises via le mot-clé abstract. .déclaré. Les méthodes abstraites n'ont que des déclarations de méthode et aucune implémentation de méthode. Le corps de la méthode ne peut pas être écrit.

  • abstract class ShopProductWriter
    {
        protected $product = [];
    
        /**
         * 抽象类中可以定义普通方法
         */
        public function addProduct($shopProduct)
        {
            $this->product = $shopProduct;
        }
    
        /**
         * 定义一个抽象方法,只有方法声明,没有方法实现
         */
        abstract public function write();
    }
  • Toute classe qui hérite d'une classe abstraite doit implémenter toutes les méthodes abstraites, sinon elle doit être définie comme une classe abstraite elle-même. Les sous-classes ne peuvent pas simplement implémenter des méthodes abstraites, elles doivent également adhérer aux signatures des méthodes. Cela signifie que les méthodes d’implémentation ne peuvent pas avoir un contrôle d’accès plus strict que les méthodes abstraites. La méthode d'implémentation doit également avoir le même nombre de paramètres que la méthode abstraite et les mêmes indications de type.

  • class XmlProductWriter extends ShopProductWriter
    {
        /**
         * 任何继承自抽象类的类都必须实现所有的抽象方法
         */
        public function write()
        {
            echo 'XmlProductWriter';
        }
    }

Interface :

  • Les classes abstraites nous permettent de fournir certaines implémentations, mais les interfaces sont de purs modèles. Les interfaces définissent uniquement des fonctions et ne peuvent pas avoir d'implémentations. Il peut y avoir des déclarations de propriétés et de méthodes, mais pas de corps de méthode.

  • Utilisez le mot-clé interface pour déclarer une interface.

  • interface Price
    {
        /**
         * 只有方法声明,没有方法实现
         */
        public function getPrice();
    }
  • Toute classe qui implémente cette interface doit implémenter toutes les méthodes définies par cette interface, sinon cette classe ne peut être déclarée que comme classe abstraite.

  • Vous pouvez utiliser le mot-clé Implements dans la déclaration d'une classe pour lui faire implémenter l'interface.

  • class ShopProduct implements Price
    {
        protected $price;
    
        public function getPrice()
        {
            // TODO: Implement getPrice() method.
            return $this->price;
        }
    }
  • Une classe d'implémentation a le même type que l'interface qu'elle implémente.

  • Une classe peut implémenter plusieurs interfaces tout en héritant d'une classe parent. Le mot-clé Implements est suivi des noms de plusieurs interfaces, séparés par des virgules.

Recommandations associées :

formation php

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