Heim >Backend-Entwicklung >PHP-Problem >Was ist der Unterschied zwischen abstrakter Klasse und Schnittstelle in PHP?

Was ist der Unterschied zwischen abstrakter Klasse und Schnittstelle in PHP?

青灯夜游
青灯夜游Original
2020-10-30 16:47:432995Durchsuche

Unterschiede: 1. Abstrakte Klassen können Attribute, gewöhnliche Methoden und abstrakte Methoden haben, aber Schnittstellen können keine Attribute und gewöhnlichen Methoden haben und können Konstanten haben. 2. Abstrakte Klassen werden vor der Klasse mit dem Schlüsselwort abstract deklariert, und die Klasse ist es Als Klasse deklariert: Die Schnittstelle wird mit Schnittstelle deklariert, kann jedoch nicht mit Klasse deklariert werden, da die Schnittstelle keine Klasse ist.

Was ist der Unterschied zwischen abstrakter Klasse und Schnittstelle in PHP?

Empfohlen: „PHP-Video-Tutorial

Für die objektorientierte Entwicklung sind abstrakte Klassen und Schnittstellen relativ schwer zu verstehen. Der folgende Artikel stellt Ihnen den Unterschied zwischen abstrakten Klassen und Schnittstellen in PHP vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Abstrakte Klasse: Sie basiert auf einer Klasse. Sie ist lediglich eine spezielle Klasse, die nicht direkt in der Klasse definiert werden kann. Ähnlich wie Vorlagen können Unterklassen nach der Spezifikation detaillierte Funktionen implementieren.

Schnittstelle: Basiert hauptsächlich auf Methodenspezifikationen, ein bisschen wie abstrakte Methoden in abstrakten Klassen, mit der Ausnahme, dass sie unabhängiger sind als abstrakte Methoden. Eine Klasse kann durch Kombination mehrerer Methoden zu einer neuen Klasse zusammengefasst werden.

Der Unterschied zwischen abstrakten Klassen und Schnittstellen in PHP

1 Abstrakte Klassen können Attribute, gewöhnliche Methoden und abstrakte Methoden haben, aber Schnittstellen können keine Attribute und gewöhnlichen Methoden haben und können Konstanten haben

2 In einer abstrakten Klasse müssen Methoden vorhanden sein, es müssen jedoch „abstrakte“ Methoden vorhanden sein

3. Die Syntax ist unterschiedlich Eine Klasse, und die Schnittstelle wird mit Schnittstelle deklariert, kann jedoch nicht mit Klasse deklariert werden, da die Schnittstelle keine Klasse ist.

5. Die abstrakten Methoden abstrakter Klassen müssen mit abstract deklariert werden, Schnittstellen müssen jedoch nicht deklariert werden

6. Abstrakte Klassen verwenden das Schlüsselwort „extends“, um der Unterklasse zu ermöglichen, die übergeordnete Klasse zu erben und dann detaillierte abstrakte Methoden zu implementieren in der Unterklasse. Die Schnittstelle verwendet Implementierungen, um es gewöhnlichen Klassen zu ermöglichen, detaillierte Methoden der Schnittstelle in der Klasse zu implementieren, und die Schnittstelle kann mehrere Methoden gleichzeitig implementieren. Verwenden Sie einfach Kommas, um jede Schnittstelle zu trennen.

Abstrakte Klasse:

    Abstrakte Klasse kann keine Instanziierung sein, ihre Rolle besteht darin, die Schnittstelle für alle Klassen zu definieren (oder teilweise zu implementieren), die von ihr erben.
  • Verwenden Sie das Schlüsselwort abstract, um abstrakte Klassen zu definieren.
  • Methoden und Eigenschaften können in abstrakten Klassen genau wie in gewöhnlichen Klassen erstellt werden. In den meisten Fällen enthält eine abstrakte Klasse auch mindestens eine abstrakte Methode, die über das Schlüsselwort abstract deklariert wird. Abstrakte Methoden haben nur Methodendeklarationen und keine Methodenimplementierungen. Der Methodenkörper kann nicht geschrieben werden.
  • abstract class ShopProductWriter
    {
        protected $product = [];
    
        /**
         * 抽象类中可以定义普通方法
         */
        public function addProduct($shopProduct)
        {
            $this->product = $shopProduct;
        }
    
        /**
         * 定义一个抽象方法,只有方法声明,没有方法实现
         */
        abstract public function write();
    }
    Jede Klasse, die von einer abstrakten Klasse erbt, muss alle abstrakten Methoden implementieren, andernfalls muss sie selbst als abstrakte Klasse definiert werden. Unterklassen können nicht nur abstrakte Methoden implementieren, sondern müssen auch Methodensignaturen einhalten. Dies bedeutet, dass Implementierungsmethoden keine strengere Zugriffskontrolle haben können als abstrakte Methoden. Die Implementierungsmethode muss außerdem über die gleiche Anzahl von Parametern wie die abstrakte Methode und dieselben Typhinweise verfügen.
  • class XmlProductWriter extends ShopProductWriter
    {
        /**
         * 任何继承自抽象类的类都必须实现所有的抽象方法
         */
        public function write()
        {
            echo 'XmlProductWriter';
        }
    }
Schnittstelle:

    Abstrakte Klassen ermöglichen es uns, einige Implementierungen bereitzustellen, aber Schnittstellen sind reine Vorlagen. Schnittstellen definieren nur Funktionen und können keine Implementierungen haben. Es können Deklarationen von Eigenschaften und Methoden vorhanden sein, jedoch keine Methodenkörper.
  • Verwenden Sie das Schlüsselwort interface, um eine Schnittstelle zu deklarieren.
  • interface Price
    {
        /**
         * 只有方法声明,没有方法实现
         */
        public function getPrice();
    }
    Jede Klasse, die diese Schnittstelle implementiert, muss alle von dieser Schnittstelle definierten Methoden implementieren, andernfalls kann diese Klasse nur als abstrakte Klasse deklariert werden.
  • Sie können das Schlüsselwort „implements“ in der Deklaration einer Klasse verwenden, damit diese die Schnittstelle implementiert.
  • class ShopProduct implements Price
    {
        protected $price;
    
        public function getPrice()
        {
            // TODO: Implement getPrice() method.
            return $this->price;
        }
    }
    Eine Implementierungsklasse hat denselben Typ wie die Schnittstelle, die sie implementiert.
  • Eine Klasse kann mehrere Schnittstellen implementieren und gleichzeitig eine übergeordnete Klasse erben. Auf das Schlüsselwort „implements“ folgen die Namen mehrerer Schnittstellen, getrennt durch Kommas.
  • Verwandte Empfehlungen:
php-Training

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen abstrakter Klasse und Schnittstelle in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn