Im Kurs „PHP from Getting Started to Mastery Video Tutorial“ ist PHP (ausländischer Name: PHP: Hypertext Preprocessor, chinesischer Name: „Hypertext Preprocessor“) eine allgemeine Open-Source-Skriptsprache. Die Syntax übernimmt die Eigenschaften der Sprache C, Java und Perl, ist leicht zu erlernen und weit verbreitet und eignet sich hauptsächlich für den Bereich der Webentwicklung. Die einzigartige PHP-Syntax mischt C, Java, Perl und PHPs eigene Syntax. Es kann dynamische Webseiten schneller ausführen als CGI oder Perl. Im Vergleich zu anderen Programmiersprachen betten dynamische Seiten, die mit PHP erstellt wurden, Programme zur Ausführung in ein HTML-Dokument (eine Anwendung unter der Standard Universal Markup Language) ein, und die Ausführungseffizienz ist viel höher als bei CGI, das HTML-Tags vollständig generiert. PHP kann auch kompilierten Code ausführen Durch die Kompilierung kann eine Verschlüsselung erreicht und die Ausführung des Codes optimiert werden, wodurch die Ausführung des Codes beschleunigt wird.
Adresse für die Kurswiedergabe: http://www.php.cn/course/351.html
Der Unterrichtsstil des Lehrers:
Die Vorträge sind freundlich und natürlich, unprätentiös, nicht anmaßend oder absichtlich übertrieben, sondern sprechen eloquent und sorgfältig zwischen Lehrern und Schülern. In einer Atmosphäre der Gleichberechtigung, Zusammenarbeit und Harmonie, stiller emotionaler Austausch werden durchgeführt und der Wunsch und die Erforschung von Wissen werden in einfache und reale Unterrichtssituationen integriert. Die Schüler erlangen Wissen durch stilles Denken und stille Zustimmung.
Die schwierigeren Punkte In diesem Video werden die drei Hauptmerkmale der objektorientierten Programmierung vorgestellt:
1. Kapselung
Der professionelle Punkt ist das Verbergen von Informationen, was sich auf die Verwendung von bezieht Abstrakte Datentypen kapseln Daten und datenbasierte Operationen, um eine unteilbare unabhängige Einheit zu bilden. Die Daten werden innerhalb des abstrakten Datentyps geschützt und interne Details bleiben so weit wie möglich verborgen, wobei nur einige externe Schnittstellen zur Verbindung mit der Außenwelt erhalten bleiben. Andere Objekte im System können nur über autorisierte Operationen außerhalb der Daten mit diesem gekapselten Objekt kommunizieren und interagieren. Das heißt, der Benutzer muss die internen Details des Objekts nicht kennen, sondern kann über die vom Objekt bereitgestellte Schnittstelle auf das Objekt zugreifen.
Bei der Kapselung kapselt ein Objekt seine eigenen Eigenschaften und Methoden, sodass es seine eigenen Vorgänge ausführen kann, ohne auf andere Objekte angewiesen zu sein. Die Verwendung der Kapselung bietet drei Hauptvorteile:
1. Eine gute Kapselung kann die Kopplung reduzieren.
2. Die Struktur innerhalb der Klasse kann frei geändert werden.
3. Sie können Mitglieder genauer steuern.
4. Informationen ausblenden und Details implementieren.
Durch die Kapselung werden die Eigenschaften eines Objekts privatisiert und einige Methoden für Eigenschaften bereitgestellt, auf die von außen zugegriffen werden kann. Wenn wir keinen Zugriff durch externe Methoden wünschen, müssen wir keine Methoden bereitstellen Zugang von außen. Wenn eine Klasse jedoch keine Methoden für den externen Zugriff bereitstellt, ist diese Klasse bedeutungslos.
public class Husband { /* * 对属性的封装 * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 */ private String name ; private String sex ; private int age ; private Wife wife; /* * setter()、getter()是该对象对外开发的接口 */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setWife(Wife wife) { this.wife = wife; } }
Durch die Kapselung können wir die interne Implementierung einer Klasse einfach ändern, ohne den Clientcode zu ändern, der die Klasse verwendet. Sie können Mitgliedsvariablen genauer steuern.
1. public void setAge(int age) { 2. if(age > 120){ 3. System.out.println("ERROR:error age input...."); //提示错误信息 4. }else{ 5. this.age = age; 6. } 7. }
. public String getSexName() { 2. if("0".equals(sex)){ 3. sexName = "女"; 4. } 5. else if("1".equals(sex)){ 6. sexName = "男"; 7. } 8. else{ 9. sexName = "人妖"; 10. } 11. return sexName; 12. }
2. Vererbung
2.1 Überblick über die Vererbung
Vererbung ist eine Technologie, die die Definition einer vorhandenen Klasse als Grundlage für die Erstellung einer neuen Klasse verwendet Die Definition kann neue Daten oder neue Funktionen hinzufügen oder die Funktionen der übergeordneten Klasse verwenden, sie kann die übergeordnete Klasse jedoch nicht selektiv erben. Durch die Verwendung der Vererbung können wir vorherigen Code sehr bequem wiederverwenden, was die Entwicklungseffizienz erheblich verbessern kann.
Vererbung beschreibt die „ist-a“-Beziehung. Wenn es zwei Objekte A und B gibt und dies als „A ist B“ beschrieben werden kann, kann dies bedeuten, dass A B erbt, während B The vererbt Der Nachfolger wird als übergeordnete Klasse oder Superklasse bezeichnet, und der Nachfolger wird als Unterklasse oder abgeleitete Klasse bezeichnet.
Tatsächlich ist der Nachfolger eine Spezialisierung des Geerbten. Zusätzlich zu den Eigenschaften des Geerbten weist er auch seine eigenen einzigartigen Eigenschaften auf. Katzen haben beispielsweise Eigenschaften, die andere Tiere nicht haben, wie zum Beispiel das Fangen von Mäusen und das Klettern auf Bäume. Gleichzeitig kann der Erbe in der Erbschaftsbeziehung das Geerbte vollständig ersetzen, aber nicht umgekehrt. Wir können beispielsweise sagen, dass eine Katze ein Tier ist, aber wir können nicht sagen, dass das Tier tatsächlich eine Katze ist Der Grund, warum wir dies „Aufwärtstransformation“ nennen.
Es stimmt, dass Vererbung definiert, wie Klassen zueinander in Beziehung stehen und Merkmale teilen. Für mehrere identische oder bekannte Klassen können wir ihre gemeinsamen Verhaltensweisen oder Attribute abstrahieren und sie als übergeordnete Klasse oder Superklasse definieren und diese Klassen dann verwenden, um die übergeordnete Klasse zu erben. Sie können nicht nur die Eigenschaften und Methoden der übergeordneten Klasse haben Sie können auch Ihre eigenen einzigartigen Eigenschaften oder Methoden definieren.
Gleichzeitig müssen Sie sich bei der Verwendung der Vererbung drei Sätze merken:
1 Die Unterklasse verfügt über die nicht privaten Attribute und Methoden der übergeordneten Klasse.
2. Unterklassen können ihre eigenen Attribute und Methoden haben, das heißt, Unterklassen können übergeordnete Klassen erweitern.
3. Unterklassen können die Methoden der übergeordneten Klasse auf ihre eigene Weise implementieren. (Später eingeführt).
Diese drei Dinge sind beim Erlernen der Vererbung unverzichtbar: Konstruktor, geschütztes Schlüsselwort, Aufwärtstransformation
2.2 Konstruktor
Durch das Vorhergehende wissen wir, dass Unterklassen zusätzlich von übergeordneten Klassen erben können Neben diesen privaten Eigenschaften und Methoden gibt es eine Sache, die Unterklassen nicht erben können: Konstruktoren. Der Konstruktor kann nur aufgerufen und nicht vererbt werden. Um den Konstruktor der übergeordneten Klasse aufzurufen, können wir super() verwenden.
Der Konstruktionsprozess breitet sich von der übergeordneten Klasse aus „nach außen“ aus, d. Und wir haben nicht explizit auf den Konstruktor der übergeordneten Klasse verwiesen. Das ist die Cleverness von Java: Der Compiler ruft standardmäßig den Konstruktor der übergeordneten Klasse für die Unterklasse auf.
Dieser Standardaufruf an den Konstruktor der übergeordneten Klasse wird jedoch vorhergesagt: Die übergeordnete Klasse verfügt über einen Standardkonstruktor. Wenn die übergeordnete Klasse keinen Standardkonstruktor hat, müssen wir explizit super() verwenden, um den Konstruktor der übergeordneten Klasse aufzurufen. Andernfalls meldet der Compiler einen Fehler: Es konnte kein Konstruktor gefunden werden, der der Form der übergeordneten Klasse entspricht.
Für Unterklassen ist die korrekte Initialisierung ihres Konstruktors sehr wichtig, und zwar nur dann, wenn es nur eine Methode gibt, die dies sicherstellen kann: den Aufruf des Konstruktors der übergeordneten Klasse im Konstruktor, um die Initialisierung abzuschließen, und die übergeordnete Der Klassenkonstruktor verfügt über alle erforderlichen Kenntnisse und Fähigkeiten, um die Initialisierung der übergeordneten Klasse durchzuführen.
Bei der Vererbung ruft die Unterklasse standardmäßig den Konstruktor der übergeordneten Klasse auf. Wenn jedoch kein Standardkonstruktor der übergeordneten Klasse vorhanden ist, muss die Unterklasse den Konstruktor der übergeordneten Klasse explizit angeben in der untergeordneten Klasse sein. Das erste, was im Klassenkonstruktor erledigt wird (die erste Codezeile).
2.3 protected keyword
Der private Zugriffsmodifikator ist die beste Wahl für die Kapselung, aber dies basiert nur auf einer idealen Welt. Manchmal brauchen wir eine solche Anforderung: Wir müssen bestimmte Dinge so sehr verbergen wie möglich aus der Welt entfernen, aber dennoch Mitgliedern von Unterklassen den Zugriff darauf ermöglichen. Zu diesem Zeitpunkt müssen Sie protected verwenden.
„Geschützt“ bedeutet, dass es für den Klassenbenutzer privat ist, aber für jede Unterklasse, die diese Klasse oder eine andere Klasse im selben Paket erbt, zugänglich ist.
2.4 Aufwärtstransformation
In der Vererbung oben haben wir über Vererbung als eine gegenseitige Beziehung von is-a, Katzenvererbung und Tier gesprochen, sodass wir sagen können, dass die Katze ein Tier ist, oder dass die Katze eine Art Tier ist. Katzen auf diese Weise als Tiere zu betrachten, bedeutet eine Transformation nach oben.
3. Polymorphismus
3.1 Überblick über Polymorphismus
Der sogenannte Polymorphismus bezieht sich auf den spezifischen Typ, auf den die im Programm definierte Referenzvariable und die dadurch ausgegebenen Methoden zeigen Die Referenzvariable Der Aufruf wird nicht während der Programmierung bestimmt, sondern während der Ausführung des Programms, dh auf welches Klasseninstanzobjekt eine Referenzvariable zeigt und in welcher Klasse der von der Referenzvariable ausgegebene Methodenaufruf implementiert werden muss . Dies kann während der Ausführung des Programms entschieden werden. Da die spezifische Klasse nur bestimmt wird, wenn das Programm ausgeführt wird, kann die Referenzvariable an verschiedene Klassenimplementierungen gebunden werden, ohne den Quellprogrammcode zu ändern, wodurch sich die durch die Referenz aufgerufene spezifische Methode entsprechend ändert, das heißt, dies ist nicht erforderlich Der Programmcode kann den an das Programm gebundenen spezifischen Code während der Ausführung ändern, wodurch das Programm mehrere Ausführungszustände auswählen kann. Dies ist Polymorphismus.
Wir können den Polymorphismus also wie folgt zusammenfassen:
Da die Referenz der übergeordneten Klasse, die auf die Unterklasse zeigt, nach oben transformiert ist, kann sie nur auf die Methoden und Eigenschaften zugreifen, die der übergeordneten Klasse gehören, während für die Unterklasse Für eine Methode, die in der übergeordneten Klasse vorhanden ist, aber nicht in der übergeordneten Klasse vorhanden ist, kann die Referenz nicht verwendet werden, selbst wenn die Methode überladen ist. Wenn eine Unterklasse einige Methoden in der übergeordneten Klasse überschreibt, muss sie beim Aufrufen dieser Methoden die in der Unterklasse definierten Methoden verwenden (dynamische Verbindung, dynamischer Aufruf).
Bei der objektorientierten Programmierung wird der Polymorphismus in Polymorphismus zur Kompilierungszeit und Polymorphismus zur Laufzeit unterteilt. Unter diesen ist der Polymorphismus zur Bearbeitungszeit statisch und bezieht sich hauptsächlich auf die Methodenüberladung. Nach der Bearbeitung gibt es keinen Polymorphismus. Laufzeitpolymorphismus ist dynamisch und wird durch dynamische Bindung erreicht, die wir Polymorphismus nennen.
3.2 Bedingungen für die Umsetzung des Polymorphismus
Zu Beginn wurde erwähnt, dass Vererbung die Umsetzung des Polymorphismus vorbereitet. Das Unterklassen-Kind erbt die übergeordnete Klassentypreferenz, die auf die Unterklasse zeigt. Diese Referenz kann entweder das übergeordnete Klassenobjekt oder das untergeordnete Objekt verarbeiten, wenn dieselbe Nachricht an die Unterklasse oder die übergeordnete Klasse gesendet wird Klasse Wenn ein Objekt verwendet wird, führt das Objekt je nach Referenz, zu der es gehört, unterschiedliche Verhaltensweisen aus. Dies ist Polymorphismus. Das heißt, Polymorphismus bedeutet, dass dieselbe Nachricht dazu führt, dass verschiedene Klassen unterschiedlich reagieren.
Es gibt drei notwendige Bedingungen für Java, um Polymorphismus zu erreichen: Vererbung, Umschreiben und Aufwärtstransformation.
Vererbung: Beim Polymorphismus müssen Unterklassen und Elternklassen mit Vererbungsbeziehungen vorhanden sein.
Umschreiben: Die Unterklasse definiert bestimmte Methoden in der übergeordneten Klasse neu, und wenn diese Methoden aufgerufen werden, werden die Methoden der Unterklasse aufgerufen.
Aufwärtstransformation: Beim Polymorphismus muss die Referenz der Unterklasse dem übergeordneten Klassenobjekt zugewiesen werden. Nur auf diese Weise kann die Referenz die Methoden der übergeordneten Klasse und die Methoden der übergeordneten Klasse aufrufen Unterklasse.
Nur wenn die oben genannten drei Bedingungen erfüllt sind, können wir einheitliche Logik verwenden, um Code in derselben Vererbungsstruktur zu implementieren, um verschiedene Objekte zu verarbeiten und dadurch unterschiedliche Verhaltensweisen auszuführen.
Für Java folgt der polymorphe Implementierungsmechanismus einem Prinzip: Wenn eine Objektreferenzvariable der Oberklasse auf ein Unterklassenobjekt verweist, bestimmt der Typ des referenzierten Objekts und nicht der Typ der Referenzvariablen, wessen Mitglied die Methode aufgerufen wird , aber die aufgerufene Methode muss in der Superklasse definiert sein, also eine Methode, die von der Unterklasse überschrieben wird.
3.3 Implementierungsform
Es gibt zwei Formen von Polymorphismus in Java: Vererbung und Schnittstelle.
3.2.1. Auf Vererbung basierender Implementierungsmechanismus
Der auf Vererbung basierende Implementierungsmechanismus spiegelt sich hauptsächlich im Umschreiben bestimmter Methoden durch die übergeordnete Klasse und eine oder mehrere Unterklassen wider, die die übergeordnete Klasse erben . Mehrere Unterklassen, die dieselbe Methode überschreiben, können unterschiedliche Verhaltensweisen aufweisen.
Der auf Vererbung basierende Polymorphismus kann wie folgt zusammengefasst werden: Für einen übergeordneten Klassentyp, der auf eine Unterklasse verweist, gilt er bei der Verarbeitung der Referenz für alle Unterklassen, die die übergeordnete Klasse erben Die Implementierung der Methode ist ebenfalls unterschiedlich, und das Verhalten, das durch die Ausführung derselben Aktion hervorgerufen wird, ist ebenfalls unterschiedlich.
Wenn die übergeordnete Klasse eine abstrakte Klasse ist, muss die Unterklasse alle abstrakten Methoden in der übergeordneten Klasse implementieren. Auf diese Weise müssen alle Unterklassen der übergeordneten Klasse eine einheitliche externe Schnittstelle haben, aber ihre internen spezifischen Implementierungen kann unterschiedlich sein. Auf diese Weise können wir die von der obersten Klasse bereitgestellte einheitliche Schnittstelle verwenden, um die Methoden auf dieser Ebene zu verarbeiten.
3.2.2. Polymorphismus basierend auf der Schnittstellenimplementierung
Die Vererbung wird durch das Umschreiben mehrerer verschiedener Unterklassen derselben Methode der übergeordneten Klasse widergespiegelt. Dies kann dann durch die Implementierung der Schnittstelle erreicht werden verkörpert durch mehrere verschiedene Klassen, die dieselbe Methode in der Schnittstelle abdecken.
Im Polymorphismus der Schnittstelle muss die Referenz, die auf die Schnittstelle zeigt, ein Instanzprogramm sein, das eine Klasse angibt, die die Schnittstelle implementiert. Zur Laufzeit wird die entsprechende Methode entsprechend dem tatsächlichen Typ der Objektreferenz ausgeführt .
Vererbung ist eine Einzelvererbung, die nur eine konsistente Serviceschnittstelle für eine Gruppe verwandter Klassen bereitstellen kann. Schnittstellen können jedoch über mehrere Vererbungen und mehrere Implementierungen verfügen. Sie können mithilfe einer Reihe verwandter oder nicht verwandter Schnittstellen kombiniert und erweitert werden und können konsistente Serviceschnittstellen für die Außenwelt bereitstellen. Es ist also flexibler als die Vererbung.
Das obige ist der detaillierte Inhalt vonEmpfohlene Ressourcen für PHP-Video-Tutorials vom Einstieg bis zur Beherrschung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!