Detaillierte Erläuterung meines Verständnisses von objektorientierter PHP-Sprache

零下一度
Freigeben: 2023-03-12 12:22:01
Original
1513 Leute haben es durchsucht

Vorwort:

Heute werde ich Ihnen die objektorientierte Natur von PHP vorstellen. Apropos objektorientiert, ich muss prozessorientiert erwähnen, denn als Anfänger konnte ich den Unterschied oft nicht erkennen. Was ist also der Unterschied zwischen objektorientiert und prozessorientiert? Lassen Sie mich es Ihnen kurz vorstellen:

Objektorientiert Konzentrieren Sie sich darauf, welches Objekt ein Problem löst.

Sein größtes Merkmal besteht darin, dass es aus Klassen mit Attributen und Funktionen besteht und aus den Klassen Objekte abgerufen werden können, um Probleme zu lösen.

Prozessorientiert Fokus auf den Prozess der Lösung eines Problems. Das größte Merkmal ist, dass eine Reihe von Prozessen verwendet werden, um dieses Problem nacheinander zu lösen.

Nachdem wir den Unterschied zwischen objektorientiert und prozessorientiert verstanden haben, lernen wir die Grundkenntnisse von objektorientiertem PHP.

***Schlüsselwörter in diesem Kapitel: Objektorientierte Grundlagen, Kapselung und Vererbung, PHP-Schlüsselwörter, Singletons, Objektserialisierung und Magie Methoden, abstrakte Klassen und abstrakte Methoden, Schnittstellen und Polymorphismus.

Was Sie wissen müssen~~~ Es gibt drei Hauptmerkmale von PHP-Objektorientierung, die wir kennen müssen: Vererbung;

一、面向对象基础
1. Objektorientierte Grundlagen

Objektorientiert

1. Was ist eine Klasse?
Eine Sammlung einer Reihe von Individuen mit denselben Attributen (Eigenschaften) und Methoden (Verhalten). Eine Klasse ist ein abstraktes Konzept.

2. Was ist ein Objekt?
Das Individuum mit bestimmten Attributwerten, die aus der Klasse erhalten werden, wird als Objekt bezeichnet. Das Objekt ist eine bestimmte Person.
zB: Mensch; Zhang San

3. Welche Beziehung besteht zwischen Klassen und Objekten?
Eine Klasse ist eine Abstraktion eines Objekts! Objekte sind die Verdinglichung von Klassen!
Die Klasse gibt nur an, welche Attribute dieser Objekttyp hat, sie kann jedoch keine spezifischen Werte haben, daher ist die Klasse abstrakt.
Das Objekt ist eine bestimmte Person, nachdem alle Attribute der Klasse zugewiesen wurden. Alle Objekte sind spezifisch.

2. Klassendeklaration und Instanziierung
1. So deklarieren Sie eine Klasse:
Klassenname {
Zugriffsmodifikator $property[=default];
[Zugriffsmodifikator] function method(){}
}

2. Dinge, die bei der Deklaration einer Klasse zu beachten sind:
① Der Klassenname darf nur aus Buchstaben, Zahlen und Unterstrichen bestehen und darf nicht mit einer Zahl beginnen mit der Big-Camel-Case-Regel. ;
②Der Klassenname muss mit der Klasse geändert werden und es darf kein () nach dem Klassennamen stehen;
③Attribute müssen haben Zugriffsmodifikatoren und Methoden können ohne Zugriffsmodifikatoren sein.

3. Aufruf von instanziierten Objekten und Objektattributmethoden:
$object name = neuer Klassenname (); //() kann weggelassen werden

Eigenschaften und Methoden von außerhalb der Klasse aufrufen:
$object name-> //Bei Verwendung von -> der Eigenschaftsname Das $-Symbol kann nicht

zum Aufrufen von Attributen und Methoden innerhalb der Klasse verwendet werden:
$this -> $property name;

3. Konstruktor
1.
Der Konstruktor ist eine spezielle Funktion in einer Klasse. Wenn wir das Schlüsselwort new verwenden, um ein Objekt zu instanziieren, entspricht dies dem Aufruf des Konstruktors der Klasse.

2. Welche Funktion hat der Konstruktor?
Beim Instanziieren eines Objekts wird es automatisch aufgerufen und verwendet, um den Eigenschaften des Objekts Anfangswerte zuzuweisen!

3. So schreiben Sie den Konstruktor:
①Der Name des Konstruktors muss mit dem Klassennamen identisch sein
[öffentliche] Funktion Person ($name){
$this -> name = $name;
}
②Verwenden Sie die magische Methode __construct
[public] function __construct($name){
$this -> name = $name;
}
4. Hinweise zu Konstruktoren:
① Die erste Schreibweise: Der Name des Konstruktors muss mit dem der Klasse identisch sein! ! ! !
②Wenn eine Klasse keinen handgeschriebenen Konstruktor hat, verfügt das System standardmäßig über einen leeren Parameterkonstruktor, sodass Sie new Person(); verwenden können
Wenn wir Schreiben Sie einen Konstruktor mit Parameterkonstruktor, es wird keinen leeren Parameterkonstruktor mehr geben, das heißt, new Person() kann nicht direkt verwendet werden
Die Parameterliste in () nach Person muss die Anforderungen erfüllen des Konstrukteurs ! ! ! !
③Wenn beide Konstruktoren gleichzeitig existieren, wird __construct verwendet.

5. Destruktor: __destruct():
①Der Destruktor wird automatisch aufgerufen, bevor das Objekt zerstört und freigegeben wird
②Der Destruktor kann keine Parameter annehmen.
③Der Destruktor wird häufig verwendet, um Ressourcen freizugeben, Ressourcen zu schließen usw., nachdem das Objekt verwendet wurde.

6. Magische Methode:
PHP stellt uns eine Reihe von Funktionen bereit, die mit __ beginnen. Diese Funktionen müssen nicht manuell aufgerufen werden,
wird automatisch zum richtigen Zeitpunkt aufgerufen. Diese Art von Funktion wird als Magie bezeichnet und als magische Funktion bezeichnet.
Beispiel: Funktion __construct(){} wird automatisch aufgerufen, wenn ein neues Objekt erstellt wird
Funktion __destruct(){} wird automatisch aufgerufen, wenn das Objekt zerstört wird
Wir verlangen, dass benutzerdefinierte Funktionen und Methoden mit Ausnahme von magischen Methoden nicht mit __ beginnen dürfen.

Abschließend schreiben wir im Allgemeinen Klassen mit komplexeren Funktionen in eine separate Klassendatei.
Die Klassendatei wird mit der Methode „Klassenname Kleinbuchstaben.class.php“ im gleichen Kleinbuchstaben benannt.
Wenn Sie diese Klasse in anderen Dateien verwenden, können Sie include verwenden, um diese „.class.php“-Datei zu importieren.

2. Kapselung und Vererbung
二、封装和继承

1. Was ist Kapselung?
Verwenden Sie Zugriffsmodifikatoren, um die Eigenschaften und Methoden in der Klasse zu privatisieren, die keinen externen Zugriff erfordern, um eine Zugriffskontrolle zu erreichen.

*Hinweis: Dies dient der Implementierung der Zugriffskontrolle und nicht der Verweigerung des Zugriffs. Mit anderen Worten: Nachdem wir die Attribute privatisiert haben, müssen wir entsprechende Methoden bereitstellen, damit Benutzer die Attribute über die von uns bereitgestellten Methoden verarbeiten können.

2. Welche Rolle spielt die Kapselung?
① Benutzer kümmern sich nur um die Funktionen, die die Klasse bereitstellen kann, und kümmern sich nicht um die Details der Funktionsimplementierung! (Kapselungsmethode)
② Kontrollieren Sie die Daten des Benutzers, verhindern Sie das Festlegen illegaler Daten und steuern Sie die an den Benutzer zurückgegebenen Daten (Attributkapselung + Set/Get-Methode)

3. Kapselungsvorgang implementieren?
①Methodenkapselung
Für einige Methoden, die nur innerhalb der Klasse verwendet werden und nicht für die externe Verwendung bereitgestellt werden, können wir für solche Methoden den Privatisierungsprozess verwenden.
private function formatName(){} //Diese Methode kann nur innerhalb der Klasse verwendet werden, indem $this verwendet wird, um
function showName(){
$this -> formatName();
}
②Attributkapselung + Set/Get-Methode
In Reihenfolge zur Steuerung Zum Festlegen und Lesen von Attributen können Sie die Attribute privatisieren und von Benutzern verlangen, sie über die von uns bereitgestellten Set/Get-Methoden festzulegen
private $age;
function setAge($age){
$this->age=$age;
}
function getAge(){
return $this->age;
}
$object->getAge();
$Object->setAge(12);

③Attributkapselung + magische Methode
private $age;
function __get($key){
return $this->$key;
}
function __set( $key,$value){
$this->$key=$value;
}
$ object -> ;age; //Beim Zugriff auf die privaten Eigenschaften des Objekts wird die magische Methode __get() automatisch aufgerufen und der Name der aufgerufenen Eigenschaft wird an die Methode __get() übergeben. > age=12; //Beim Festlegen der privaten Attribute des Objekts wird die magische Methode __set() automatisch aufgerufen und der festgelegte Attributname und der Attributwert werden an die Methode __set() übergeben > Hinweis: Bei der magischen Methode können Sie die Verzweigungsstruktur verwenden, um den Unterschied in $key zu ermitteln und verschiedene Operationen auszuführen.

4. Bezüglich der magischen Methode der Kapselung:
①__set($key,$value): Wird automatisch aufgerufen, wenn einer Klasse ein privater Wert zugewiesen wird, wobei zwei Parameter an den übergeben werden Methode beim Aufruf: Der Attributname und der Wert, die festgelegt werden müssen.
②__get($key,$value): Wird beim Lesen der privaten Attribute der Klasse automatisch aufgerufen. Übergeben Sie beim Aufruf einen Parameter an die Methode, den Namen des zu lesenden Attributs.
③__isset($key): Wird automatisch aufgerufen, wenn die isset()-Funktion extern verwendet wird, um private Attribute zu erkennen.
>>> Verwenden Sie isset(); außerhalb der Klasse, um private Eigenschaften zu erkennen, die standardmäßig nicht erkannt werden. false
>>>Wir können also die Funktion __isset(); verwenden, um das interne Erkennungsergebnis zurückzugeben, wenn sie automatisch aufgerufen wird.
function __isset($key){
return isset($this -> $key);
}
Wenn external isset($object name->private attribute); zur Erkennung verwendet wird, wird das von obigem __isset() zurückgegebene Ergebnis automatisch aufgerufen!

④__unset($key): Wird automatisch aufgerufen, wenn die Funktion unset() extern verwendet wird, um private Attribute zu löschen;
Funktion __unset($key){
unset($this -> $key);
}
When unset($object name->private property wird extern verwendet); Beim Löschen eines Attributs wird der Attributname automatisch an __unset() übergeben und dieser magischen Methode zur Verarbeitung übergeben.


[Grundkenntnisse der Vererbung]
1.
Verwenden Sie das Schlüsselwort „extens“ für die Unterklasse, damit die Unterklasse die übergeordnete Klasse erben kann 🎜 > 2. Was ist bei der Umsetzung einer Erbschaft zu beachten?
① Unterklassen können nur nicht private Eigenschaften der übergeordneten Klasse erben.

②Nachdem eine Unterklasse eine übergeordnete Klasse geerbt hat, entspricht dies dem Kopieren der Eigenschaften und Methoden der übergeordneten Klasse in die Unterklasse, die direkt mit $this aufgerufen werden kann.
③PHP kann nur von einer Klasse erben und unterstützt nicht das Erben mehrerer Klassen durch eine Klasse. Aber eine Klasse hat mehrere Vererbungsebenen.
Klasse Person{}
Klasse Erwachsener erweitert Person{}
Klasse Student erweitert Erwachsene{}
//Die Student-Klasse verfügt über die Attribute und Methoden sowohl der Adult-Klasse als auch der Person-Klasse
3. Methodenabdeckung (Methodenumschreibung)
Bedingungen eins: Die Unterklasse erbt die übergeordnete Klasse

Bedingung zwei: Die Unterklasse überschreibt die vorhandene Methode der übergeordneten Klasse
, die die beiden oben genannten Bedingungen erfüllt. was als Methodenüberschreibung bezeichnet wird. Wenn eine Unterklasse nach dem Überschreiben eine Methode aufruft, wird die eigene Methode der Unterklasse aufgerufen.
In ähnlicher Weise können Unterklassen zusätzlich zu Methodenüberschreibungen auch Attribute mit demselben Namen wie die übergeordnete Klasse für Attributüberschreibungen haben.

Wenn die Unterklasse die Methode der übergeordneten Klasse überschreibt, wie kann dann die Methode der übergeordneten Klasse mit demselben Namen in der Unterklasse aufgerufen werden?
partent::method name();

Wenn eine Unterklasse eine übergeordnete Klasse erbt, muss dies daher der erste Schritt bei der Konstruktion sein Um die Unterklasse zu kopieren, rufen Sie zunächst den Konstruktor der übergeordneten Klasse auf.

function __construct($name,$sex,$school){
partent::__construct($name,$sex);

$this -> school = $school;
}

三、PHP关键字

1. final
①final modifizierte Klasse, diese Klasse ist die finale Klasse und kann nicht vererbt werden!
②letzte Änderungsmethode, diese Methode ist die letzte Methode und kann nicht überschrieben werden!
③final kann keine Attribute ändern.

2. statisch
① kann Attribute und Methoden ändern, die als statische Attribute bzw. statische Methoden bezeichnet werden, auch Klassenattribute und Klassenmethoden genannt; 🎜 >
②Statische Eigenschaften und statische Methoden können nur direkt über den Klassennamen aufgerufen werden.
Verwenden Sie „class name::$static property“, „class name::static method()“
Person::$sex Person::say( );
③Statische Eigenschaften und Methoden werden beim Laden der Klasse deklariert, bevor das Objekt generiert wird.
④ In statischen Methoden können nicht statische Eigenschaften oder Methoden nicht aufgerufen werden.
In nicht statischen Methoden können statische Eigenschaften und Methoden aufgerufen werden.
(Da beim Laden der Klasse statische Eigenschaften und Methoden generiert wurden und nicht statische Eigenschaftsmethoden noch nicht instanziiert wurden)
⑤In der Klasse , Sie Sie können das Schlüsselwort self verwenden, um auf den Namen dieser Klasse zu verweisen.
Klasse Person{
static $sex = "nan";
Funktion say(){
echo self::$sex;
}
}
⑥Statische Eigenschaften werden geteilt, das heißt, es wird viel Neues produziert Objekte teilen auch eine Eigenschaft.

3. const-Schlüsselwort:
Konstanten in der Klasse deklarieren, nicht in der Funktion define()! Das Schlüsselwort const muss verwendet werden.
Ähnlich wie bei der define()-Deklaration kann das Schlüsselwort const nicht zum Deklarieren von Konstanten mit $ verwendet werden und muss vollständig großgeschrieben werden!
Sobald eine Konstante deklariert ist, kann sie nicht mehr geändert werden. Verwenden Sie beim Aufrufen wie bei static den Klassennamen, um Person::constant aufzurufen.

4. Instanzoperator:
Erkennt, ob ein Objekt eine Instanz einer bestimmten Klasse ist. (Einschließlich Väter, Großeltern, Urgroßväter...)
$zhangsan instanceof Person;

[Kurze Zusammenfassung] Mehrere Spezialoperatoren
1. Es können nur Zeichenfolgen verbunden werden.
2. value"]
3. -> Objekt (Objekt aus $this new) ruft Mitgliedseigenschaften und Mitgliedsmethoden auf;
4. ::
①Verwenden Sie das Schlüsselwort parent, um die gleichnamige Methode in der übergeordneten Klasse aufzurufen: parent::say();
②Verwenden Sie den Klassennamen (und self), um die statische Methode aufzurufen in der Klasse Eigenschaften, statische Methoden und Konstanten.

4. Singleton
四、单例

Der Singleton-Modus wird auch als monomorpher Modus bezeichnet.
Es ist garantiert, dass eine Klasse nur eine Objektinstanz haben kann.

Implementierungspunkte:
① Der Konstruktor ist privat und das neue Schlüsselwort darf nicht zum Erstellen von Objekten verwendet werden.
② Stellen Sie externe Methoden zum Abrufen von Objekten bereit und bestimmen Sie, ob das Objekt in der Methode leer ist.
Wenn es leer ist, erstellen Sie das Objekt und geben Sie es zurück. Wenn es nicht leer ist, geben Sie es direkt zurück.
③Die Attribute des Instanzobjekts und die Methode zum Abrufen des Objekts müssen statisch sein.
④ Danach können Objekte nur noch mit den von uns bereitgestellten statischen Methoden erstellt werden.
eg:$s1 = Singleton::getSingle();

5. Objektserialisierung und magische Methoden
五、对象串行化和魔术方法

***Schlüsselwörter: Klonen und __clone, __antoload(), Serialisierung und Deserialisierung (Serialisierung und Deserialisierung), Typbeschränkungen, kleine magische Methode Zusammenfassung (12)


1. clone und __clone
1. Wenn = verwendet wird, um über ein Objekt zu sprechen und es einem anderen Objekt zuzuweisen, wird tatsächlich die Adresse des Objekts zugewiesen .
Zwei Objekte zeigen auf dieselbe Adresse. Wenn sich also ein Objekt ändert, ändert sich auch das andere.
zB: $lisi = $zhangsan;
2. Wenn Sie ein Objekt vollständig aus einem anderen Objekt klonen möchten, sind die beiden Objekte unabhängig voneinander andere. Für Interferenzen muss
das Schlüsselwort clone verwenden:
z. B.: $lisi = clone $zhangsan;
3. __clone():
① Wenn Sie das Schlüsselwort clone zum Klonen eines Objekts verwenden, wird die Klonfunktion automatisch aufgerufen.
②__clone()-Funktion, ähnlich dem beim Klonen verwendeten Konstruktor, kann dem neuen geklonten Objekt einen Anfangswert zuweisen.
③$this in der Funktion __clone() bezieht sich auf das neu geklonte Objekt
In einigen Versionen können Sie $that verwenden, um auf das geklonte Objekt zu verweisen In den meisten Fällen wird es von den meisten Versionen nicht unterstützt.
4. __toString()
Wenn Sie Echo und andere Ausgabeanweisungen zum direkten Drucken von Objekten verwenden, rufen Sie echo $zhangsan auf;
Dann , Sie können die von der Funktion __toString() zurückgegebene Zeichenfolge angeben > }
echo $zhangsan; //Das Ergebnis ist: haha
5. __call()
ist nicht In der aufrufenden Klasse oder in der nicht offenbarten Methode definiert, wird die Methode __call() automatisch ausgeführt.
Bei automatischer Ausführung werden zwei Parameter an die __call()-Methode übergeben

Parameter 1: Der Name der aufgerufenen Methode
Parameter zwei: (Array-)Parameterliste der aufrufenden Methode.
2. __antoload()
①Dies ist die einzige magische Methode, die nicht in einer Klasse verwendet wird;
②Wann Beim Instanziieren einer nicht vorhandenen Klasse wird diese magische Methode automatisch aufgerufen

③Beim Aufruf wird automatisch ein Parameter an __autoload() übergeben: der instanziierte Klassenname
Mit dieser Methode können Sie also die Funktion zum automatischen Laden von Dateien implementieren.
function __autoload($className){
include "class/".strtolower($className).".class.php";
}
$zhangsan=new Person();//In dieser Datei gibt es keine Person-Klasse und __autoload() wird automatisch ausgeführt, um die Datei person.class.php zu laden

3. Serialisierung und Deserialisierung (Serialisierung und Deserialisierung)
1. Serialisierung: Konvertieren Sie das Objekt durch eine Reihe von Operationen. Der Prozess der Zeichenfolge wird als Serialisierung bezeichnet >
(Objekte zeichnen sich selbst auf, indem sie Werte schreiben, die ihren Status beschreiben)
2. Deserialisierung: Der Prozess der Konvertierung einer serialisierten Zeichenfolge in ein Objekt wird Deserialisierung genannt 3. Wann sollte Serialisierung verwendet werden?
①Wenn Objekte über das Netzwerk übertragen werden müssen
②Wenn Objekte in Dateien oder Datenbanken gespeichert werden müssen
4 Serialisierung und Deserialisierung implementieren
Serialisierung: $str=serialize($zhangsan);
Deserialisierung: $duixiang=unserialize ($str);
5. __sleep() magische Methode:
① Wenn das Objekt serialisiert wird, wird die __sleep()-Funktion automatisch ausgeführt
②__sleep()-Funktion erfordert die Rückgabe eines Arrays. Die Werte im Array sind Attribute, die nicht im Array enthalten sind.
Funktion __sleep(){
return array("name","age"); //Nur die Namens-/Altersattribute können serialisiert werden.
}

6. __wakeup() magische Methode
① Wird beim Deserialisieren eines Objekts automatisch aufgerufen_ _wakeup() Methode;
②Wenn es automatisch aufgerufen wird, wird es verwendet, um die durch Deserialisierung generierten neuen Objektattribute neu zuzuweisen.
function __wakeup(){
$this -> name = "李思";
}

4. Typbeschränkungen

1. Typbeschränkungen: bezieht sich auf das Hinzufügen eines Datentyps zu einer Variablen, um einzuschränken, dass die Variable nur den entsprechenden Datentyp speichern kann.
(Dieser Vorgang ist in stark typisierten Sprachen üblich. In PHP können nur Typeinschränkungen für Arrays und Objekte implementiert werden)
2 Wenn die Typeinschränkung a bestimmte Klasse, dann können Objekte dieser Klasse und Unterklassen dieser Klasse übergeben werden.
3. In PHP können Typbeschränkungen nur in den formalen Parametern von Funktionen auftreten.
Klasse Person{}
Klasse Student erweitert Person{}
Funktion func(Person $p){ //Einschränkungsfunktion Formal Parameter, akzeptieren nur Personenklasse und Personenunterklasse
echo "1111";
echo $p -> name;
}
func(new Person()); √
func(new Student()); √
func(" 111" ); ※Basisklasse: Elternklasse
※※※ Abgeleitete Klasse: Unterklasse

5. Zusammenfassung der magischen Methoden
1. __construct(): Konstruktor, wird automatisch aufgerufen, wenn ein Objekt neu ist.
2. __destruct(): Destruktor, wird automatisch aufgerufen, wenn ein Objekt zerstört wird.
3. __get(): Wird automatisch aufgerufen, wenn auf private Eigenschaften in der Klasse zugegriffen wird. Übergeben Sie den gelesenen Attributnamen und geben Sie $this->Attribute name
4 zurück: Wird automatisch aufgerufen, wenn einem privaten Attribut der Klasse ein Wert zugewiesen wird. Übergeben Sie den Attributnamen und den Attributwert, die festgelegt werden müssen.
5. __isset(): Wird automatisch aufgerufen, wenn isset() verwendet wird, um die privaten Attribute des Objekts zu erkennen. Übergeben Sie den erkannten Attributnamen und geben Sie isset($this -> attribute name);
zurück. __unset(): Wird automatisch aufgerufen, wenn unset() zum Löschen der privaten Attribute des Objekts verwendet wird. Übergeben Sie den gelöschten Attributnamen und führen Sie unset($this -> attribute name);
7 aus: Wird automatisch aufgerufen, wenn echo zum Drucken des Objekts verwendet wird. Geben Sie den Inhalt zurück, den Sie beim Drucken des Objekts anzeigen möchten. Die Rückgabe muss eine Zeichenfolge sein.
8: Wird automatisch aufgerufen, wenn eine undefinierte oder nicht veröffentlichte Methode aufgerufen wird. Übergeben Sie den aufgerufenen Funktionsnamen und das Parameterlisten-Array.
9: Wird beim Klonen eines Objekts mit dem Schlüsselwort clone automatisch aufgerufen. Die Funktion besteht darin, das neu geklonte Objekt zu initialisieren und ihm Werte zuzuweisen.
10: wird automatisch aufgerufen, wenn das Objekt serialisiert wird. Gibt ein Array zurück, und die Werte im Array sind Attribute, die serialisiert werden können.
11: Wird automatisch aufgerufen, wenn das Objekt deserialisiert wird. Um das neu generierte Objekt zu deserialisieren, führen Sie eine Initialisierungszuweisung durch.
12: Die Funktion muss außerhalb der Klasse deklariert werden. Wird automatisch aufgerufen, wenn eine nicht deklarierte Klasse instanziiert wird. Durch Übergabe des instanziierten Klassennamens kann die entsprechende Klassendatei automatisch unter Verwendung des Klassennamens geladen werden.

6. Abstrakte Klassen und abstrakte Methoden
六、抽象类和抽象方法

1. Was ist eine abstrakte Methode?
Methoden ohne Methodenkörper {} müssen mit dem Schlüsselwort abstract geändert werden. Solche Methoden werden abstrakte Methoden genannt.
Abstrakte Funktion say(); //Abstrakte Methode

2. Was ist eine abstrakte Klasse?
Eine mit dem Schlüsselwort abstract geänderte Klasse ist eine abstrakte Klasse.
abstrakte Klasse Person{}

3. Hinweise zu abstrakten Klassen:
① Abstrakte Klassen können nicht abstrakte Klassen enthalten Klassen Methode;
② Die Klasse, die die abstrakte Methode enthält, muss eine abstrakte Klasse sein, und die abstrakte Klasse muss nicht unbedingt eine abstrakte Klasse enthalten instanziiert. (Abstrakte Klassen können abstrakte Methoden enthalten. Abstrakte Methoden haben keinen Methodenkörper und Instanziierungsaufrufe sind bedeutungslos.)
Der Zweck der Verwendung abstrakter Klassen besteht darin, die Instanziierung einzuschränken! ! !
4. Wenn eine Unterklasse eine abstrakte Klasse erbt, muss die Unterklasse alle abstrakten Methoden der übergeordneten Klasse überschreiben, es sei denn, die Unterklasse ist ebenfalls eine abstrakte Klasse.

5. Welche Rolle spielt die Verwendung abstrakter Klassen?

① Instanziierung begrenzen. (Eine abstrakte Klasse ist eine unvollständige Klasse. Die darin enthaltene abstrakte Methode hat keinen Methodenkörper und kann daher nicht instanziiert werden.)
② Die abstrakte Klasse bietet eine Spezifikation für die Vererbung von Unterklassen, und Unterklassen erben eine Abstraktion Die Klasse muss die in der abstrakten Klasse definierten abstrakten Methoden enthalten und implementieren.

7. Schnittstellen und Polymorphismus

1. Schnittstelle
1.
Eine Schnittstelle ist eine Spezifikation, die eine Reihe von Methodenkombinationen bereitstellt, die von einer Klasse implementiert werden müssen, die die Schnittstelle implementiert.
Die Schnittstelle wird mit dem Schlüsselwort interface deklariert.
interface Inter{}

2 müssen Sie sind alle abstrakte Methoden.
Abstrakte Methoden in Schnittstellen benötigen keine Zusammenfassung und können auch nicht mit dieser geändert werden.

3. Variablen können nicht in der Schnittstelle deklariert werden und es können keine Attribute verwendet werden. ! !

4. Schnittstellen können Schnittstellen erben, verwenden Sie das Schlüsselwort „extens“! Die
-Schnittstelle verwendet Erweiterungen, um die Schnittstelle zu erben, wodurch eine Mehrfachvererbung erreicht werden kann.
interface int1 erweitert Inter,Inter2{}

5. Klassen können Schnittstellen implementieren, indem sie das Schlüsselwort „implements“ verwenden!
Die Klasse verwendet Implementierungen, um mehrere Schnittstellen gleichzeitig zu implementieren.
Abstrakte Klasse Person implementiert Inter, Inter2{}
Eine Klasse implementiert eine oder mehrere Schnittstellen, dann muss diese Klasse alle abstrakten Methoden in allen Schnittstellen implementieren!
Es sei denn, diese Klasse ist eine abstrakte Klasse.

※[Unterschied zwischen Schnittstelle und abstrakter Klasse]
1. In Bezug auf die Deklarationsmethode verwendet die Schnittstelle das Schlüsselwort interface und die abstrakte Klasse die abstrakte Klasse.
2. In Bezug auf die Implementierung/Vererbung verwendet eine Klasse „extends“, um eine abstrakte Klasse zu erben, und „implementiert“, um die Schnittstelle zu implementieren.
3. Abstrakte Klassen können nur einzeln vererbt werden, während Schnittstellen auf mehrere Arten implementiert werden können. (Schnittstelle erweitert Schnittstelle), mehrere Implementierungen (Klasse implementiert Schnittstelle)
4. Abstrakte Klassen können nicht abstrakte Methoden haben, und Schnittstellen können nur abstrakte Methoden haben, keine abstrakten Methoden.
Abstrakte Methoden in abstrakten Klassen müssen mit dem Schlüsselwort abstract geändert werden, und abstrakte Methoden in Schnittstellen können nicht mit Modifikatoren geändert werden.
5. Eine abstrakte Klasse ist eine Klasse, die Attribute und Variablen haben kann.

2. Polymorphismus
1. Eine Klasse wird von mehreren Unterklassen geerbt.
Wenn eine Methode dieser Klasse unterschiedliche Funktionen in mehreren Unterklassen zeigt, nennen wir dieses Verhalten Polymorphismus.

2. Notwendige Wege, um Polymorphismus zu erreichen:
① Unterklasse erbt Elternklasse;
② Unterklasse neu schreiben Methode der übergeordneten Klasse;
③ Die Referenz der übergeordneten Klasse verweist auf das Unterklassenobjekt


Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung meines Verständnisses von objektorientierter PHP-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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