PHP objektorientierte Syntax 5 Endklasse, abstrakte Klasse, Schnittstellenstruktur (keine Klasse)

黄舟
Freigeben: 2023-03-04 11:54:01
Original
1373 Leute haben es durchsucht

Die Rolle der Klasse
1 Instanziieren des Objekts
2 Als Basisklasse anderer Klassen wird sie vererbt!
3 Rufen Sie seine statischen Mitglieder auf

Zwei Hauptfunktionen: Objekte instanziieren und vererben.

Es gibt zwei spezielle Klassen mit einer einzigen Funktion!
1, ** kann nur Objekte instanziieren und kann nicht vererbt werden. **Endgültige Klasse
2, kann nur vererbt werden und kann keine Objekte instanziieren. Die abstrakte Klasse

finale Klasse und finale Methode
finale Klasse ist das letzte Glied in der Vererbungskette. Sie kann keine Unterklassen haben

final class End{
}
class Test  extends End{
}
Nach dem Login kopieren
运行结果:报错
PHP Fatal error: Class Test may not inherit from final class (End) in /usercode/file.php on line 7
Nach dem Login kopieren

finale Methoden können nicht sein Unterklassen. Klassenumschreibung

<?php
class  AmParent{
    final public function end_func(){
        echo &#39;我是final方法&#39;;
    }
}
class AmChild extends AmParent{
     public function end_func(){
        echo &#39;我是子类,我想重写final方法,可是报错了&#39;;
    }
}
Nach dem Login kopieren
运行结果:报错
PHP Fatal error: Cannot override final method AmParentt::end_func() in /usercode/file.php on line 11
Nach dem Login kopieren

Abstrakte Klasse, abstrakte Klasse
hat eine Sache mehr als reguläre Klassen (Klassenkonstanten, statische Eigenschaften, statische Methoden, nicht statische Eigenschaften, nicht statische Methoden). )—— Abstrakte Methoden erfordern nicht abstrakte Unterklassen, um abstrakte Methoden zu implementieren.
Abstrakte Methode: Ohne {} spricht man von einer reinen Methodendeklaration. Kann Parameter haben.

abstract public function abstract_func($arg1,$arg2)
Nach dem Login kopieren
//不能实例化对象
<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
$amParent=new AmParent;
Nach dem Login kopieren
运行结果:
PHP Fatal error: Cannot instantiate abstract class AmParent in /usercode/file.php on line 5
Nach dem Login kopieren

kann nur vererbt werden:
1. Die Unterklasse ist keine abstrakte Klasse. Alle abstrakten Methoden der übergeordneten Klasse müssen implementiert werden (plus Methodenkörper {}).

<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
class AmChild extends AmParent{
}
Nach dem Login kopieren
Wenn kein Fehler gemeldet wird:
运行结果,报错:
PHP Fatal error: Class AmChild contains 1 abstract method and must therefore be 
declared abstract or implement the remaining methods (AmParent::abstract_func) in /usercode/file.php on line 6
Nach dem Login kopieren
1 Zusammenfassung hinzufügen, um eine abstrakte Klasse zu werden


2 Abstrakte Methode implementieren
<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
abstract class AmChild extends AmParent{
}
Nach dem Login kopieren

<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
 class AmChild extends AmParent{
     public function abstract_func($arg1,$arg2){
        echo $arg1.$arg2;
         }
}
$amChild=new AmChild;
$amChild->abstract_func( &#39;have implemented &#39;,&#39; abstract_func &#39;);
Nach dem Login kopieren
Bedeutung der Verwendung
运行结果,报错:
have implemented abstract_func
Nach dem Login kopieren
Abstrakte Klasse, legt fest, dass ihre nicht abstrakten Unterklassen Methoden mit demselben Namen haben müssen, der Methodenkörper jedoch unterschiedlich sein kann.


<?php
abstract class Goods{
    abstract public function sayName();
}
 class Books extends  Goods{
     public function sayName(){
         echo &#39;我是一本书的名字<br/>&#39;;
     }
}
 class Mobiles extends  Goods{
     public function sayName(){
         echo &#39;我是一部手机的名字<br/>&#39;;
     }
}
$book1=new Books;
$book1->sayName();
$mobile1=new Mobiles;
$mobile1->sayName();
Nach dem Login kopieren
Schnittstellenstruktur:
运行结果:
我是一本书的名字
我是一部手机的名字
Nach dem Login kopieren
wird verwendet, um die öffentlichen Methoden (Schnittstellenmethoden) einzuschränken, die eine Klasse (ein Objekt) haben sollte!


Schnittstellen können nur öffentliche abstrakte Methoden (unvollständige Methoden) und Konstanten enthalten!
<?php
    interface iGoods{
        const PAI=3.14;
        public function sayName();
        public function sayPrice();
    }
Nach dem Login kopieren
implementiert

Eine Klasse, die eine Schnittstellenstruktur implementiert, umfasst die in der Schnittstelle definierten abstrakten Methoden.
Zwei Optionen: 1. Definieren Sie es als abstrakte Klasse. 2. Implementieren Sie die Schnittstellenmethode!

//1定义成抽象类
abstract class Books implements iGoods{
    abstract  public function sayName();
    abstract  public function sayPrice();
}
Nach dem Login kopieren
Vergleichen Sie die Unterschiede zwischen abstrakten Klassen und Schnittstellen:
//2实现接口方法
 class Books implements iGoods{
     public function sayName(){
         echo &#39;我实现了接口方法&#39;;
     }
     public function sayPrice(){
         echo &#39;我实现了接口方法&#39;;
     }
}
Nach dem Login kopieren
1 Es gibt eine Vererbungsbeziehung zwischen abstrakten Klassen und gewöhnlichen Klassen

Gemeinsame Klassen erben abstrakte Klassen, und Sie können sie zuerst erhalten abstrakte Klassen
Zweitens müssen Sie abstrakte Methoden implementieren (nicht unbedingt öffentlich)
2. Es besteht eine Implementierungsbeziehung zwischen Schnittstellen und gewöhnlichen Klassen!
Wenn eine normale Klasse eine Schnittstelle implementiert, kann sie nur ihre nicht implementierten öffentlichen Methoden implementieren!
3. Schnittstellen werden nur zum Definieren öffentlicher Methoden und Konstanten verwendet! Und abstrakte Klassen können alles haben!
4. Mehrere Schnittstellenimplementierungen. Eine Klasse kann mehrere Schnittstellen gleichzeitig implementieren

Tipp:
<?php
interface iA{
        const PAI=3.14;
    public function sayA();
}
interface iB{
    public function sayB();
}
class C implements iA,iB{
    public function sayA(){
    }
    public function sayB(){
    }
}
Nach dem Login kopieren
Schnittstelle ist keine Klasse, eine Schnittstelle ist eine unabhängige Struktur, die dazu dient, die Struktur einer Klasse einzuschränken!


//用class_exists(@param string),判断类是否存在
var_dump(class_exists(&#39;C&#39;));
var_dump(class_exists(&#39;iA&#39;));
Nach dem Login kopieren
Es ist voll von öffentlichen Methoden und Konstanten ohne Methodenkörper oder abstrakte Schlüsselwörter.
运行结果:
bool(true)
bool(false)
Nach dem Login kopieren


Das Obige ist der Inhalt der objektorientierten PHP-Syntax 5, der letzten Klasse, der abstrakten Klasse und der Schnittstellenstruktur (nicht der Klasse). PHP chinesische Website (www.php .cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!