Heim >Backend-Entwicklung >PHP-Tutorial >PHP objektorientierte Syntax 5 Endklasse, abstrakte Klasse, Schnittstellenstruktur (keine Klasse)

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

黄舟
黄舟Original
2016-12-28 10:12:321443Durchsuche

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{
}
运行结果:报错
PHP Fatal error: Class Test may not inherit from final class (End) in /usercode/file.php on line 7

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;;
    }
}
运行结果:报错
PHP Fatal error: Cannot override final method AmParentt::end_func() in /usercode/file.php on line 11

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

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{
}
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
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{
}

<?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;);
Bedeutung der Verwendung
运行结果,报错:
have implemented abstract_func
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();
Schnittstellenstruktur:
运行结果:
我是一本书的名字
我是一部手机的名字
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();
    }
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();
}
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;;
     }
}
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(){
    }
}
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;));
Es ist voll von öffentlichen Methoden und Konstanten ohne Methodenkörper oder abstrakte Schlüsselwörter.
运行结果:
bool(true)
bool(false)


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)!


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