Wie man PHP -Code effektiv wiederverwendet - Einführung in PHP -Merkmale

Wie man PHP -Code effektiv wiederverwendet - Einführung in PHP -Merkmale

Ursprünglich entwickelt von Rasmus Lerdorf Im Jahr 1994 ist PHP eine der am häufigsten verwendeten Programmiersprachen für allgemeine Purpose. Ursprünglich als Vorlagensprache geboren, entwickelte sie sich in den Jahren zu einer vollwertigen Sprache mit richtiger Sprache Oop (Objektorientierte Programmierung) Unterstützung. Seine neueste Inkarnation, 7.X, führten neue Funktionen wie vor Rückgabetypdeklaration Für Funktionen und enorme Leistungsverbesserungen. PHP ist a Einzelvererbung Sprache: Dies bedeutet, dass eine Klasse nur für eine Eltern- oder Basisklasse erben kann. Um dieses Problem zu überwinden, wurde in der Sprache ein Feature eingeführt: Züge. In diesem Artikel werden wir sehen, wie man es benutzt und wie es funktioniert.

In diesem Tutorial lernen Sie:

  • So verwenden Sie Merkmale in PHP


Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System OS-unabhängig
Software Php
Andere Kenntnis von PHP und grundlegenden objektorientierten Programmierkonzepten
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Einführung von Merkmalen

PHP ist eine einzelne Vererbungssprache: Eine untergeordnete Klasse kann nur von einem einzigen Elternteil erben . Dies könnte ein Problem in Bezug auf die Wiederverwendung von Code darstellen, wenn die Klasse mehrere Verhaltensweisen erben muss: Züge sind eine Möglichkeit, dieses Problem zu lösen. Mal sehen, wie. Die Art und Weise, wie wir ein Merkmal erstellen, ist sehr ähnlich wie bei der Erstellung einer Klasse, aber einer der großen Unterschiede zwischen Merkmalen und Klassen ist, dass ein Merkmal ein Merkmal kann nicht instanziiert werden, kann aber nur in einer Klasse oder in einem anderen Merkmal verwendet werden. Erstellen eines Merkmals Es ist einfach:

Kopieren

Der Code, der in "Dreitone" enthalten ist, ist sehr trivial: Er protokolliert nur eine Nachricht. Mal sehen, wie wir es in einer Klasse verwenden können:

Klassentest verwenden Sie MasaTone; 
Kopieren

Der Schlüssel hier ist der verwenden Schlüsselwort, das, wenn wir in einer Klasse verwendet werden, die im Merkmal gruppierten Funktionen „importieren“. Es ist schwer vorstellbar, dass ein Fall, in dem die oben erstellte Klasse, die wir erstellt haben. Da die Klasse das Merkmal „Mabroitone“ verwendet, können wir jedoch auf die „Protokoll“ -Methode zugreifen:

$ test = neuer Test (); $ test-> log (); "Ich bin eine Methode des Mabelsones!" 
Kopieren

Das war ziemlich einfach, aber was passiert, wenn eine Klasse bereits eine Methode mit demselben Namen hat wie eine in dem von ihr verwendeten Merkmal ? Überprüfen wir es. In der Testklasse fügen wir eine "Protokoll" -Methode hinzu:

Klassentest verwenden Sie MasaTone; öffentliche Funktion log () echo "Ich bin eine Methode der Testklasse!";
Kopieren

Wenn wir jetzt die „Protokoll“ -Methode aufrufen, erhalten wir ein anderes Ergebnis:

$ test = neuer Test (); $ test-> log (); "Ich bin eine Methode der Testklasse!"
Kopieren

Was wäre, wenn die Testklasse keine „Protokoll“ -Methode hätte, sie sie jedoch von einer Basisklasse erbte, die sie erweiterte? Mal sehen:

Klassenbasis public function log () echo "Ich bin eine Methode der Basisklasse!"; Klasse-Test erweitert Basi!"
Kopieren

Wie Sie sehen, haben wir „Ich bin eine Methode von Mabitone!”Als Ergebnis des Aufrufens der Protokollmethode. Dies bedeutet, dass die Base Die Klassenmethode wurde von der im Merkmal überschrieben. Die Hierarchie ist hier einfach zu beachten. In einer Klasse:

  1. Merkmale überschreiben ererbte Methoden;
  2. Aktuelle Klassenmethoden überschreiben Merkmalsmethoden;

Verwenden mehrerer Merkmale

In einer Klasse können wir mehrere Eigenschaften verwenden: Alles, was wir tun müssen, ist, sie nach dem aufzunehmen verwenden Schlüsselwort, getrennt durch ein Komma:

Klassentest verwenden Sie Dreitone, Merkmal; 
Kopieren

Die Verwendung mehrerer Merkmale kann jedoch möglicherweise Namenskonflikte erzeugen. A fataler Fehler wird zurückgegeben, wenn die Merkmale Methoden mit demselben Namen haben:

Merkmal Mabroitone public function log () echo "Ich bin eine Methode von Treitone!"; Merkmal Merkmalwo public function log () echo" Ich bin eine Methode des Merkmals!"; Klasse -Test Verwenden Sie Dreitone, Merkmalwo; Php Fatal Fehler: Merkmalsmethode -Protokoll wurde nicht angewendet, da Kollisionen mit anderen Merkmalsmethoden 1 vorhanden sind
Kopieren

Was können wir tun, um solche Konflikte zu lösen?? Wir können die verwenden anstatt Operator mit Ausnahme der Methode, die wir nicht verwenden möchten:

Klasse test verwenden Sie Dreitone, Merkmalwo Mabaitone :: log stattdessen Merkmal; 
Kopieren

Die Syntax ist sehr einfach: Wir haben angegeben, dass wir die „log“ -Methode aus dem Merkmal des Mabels verwenden möchten, wodurch der Konflikt gelöst wird. Was ist, wenn wir wie oben tun möchten, aber wir möchten die Funktionalität, die durch die "Protokoll" -Methode bereitgestellt wird? Wir müssen eine erstellen alias dafür. Wir können es mit der Verwendung des als Operator. Im folgenden Beispiel verweigern wir die Methode "Protokoll" als "Merkmalwo_log":

Klasse test verwenden Sie Dreitone, Merkmalwo Mabaitone :: log stattdessen Merkmal; Merkmalwo :: log als Merkmalwo_Log; 
Kopieren

Auf diese Weise können wir weiterhin auf die „Protokoll“ -Methode des Merkmals zugreifen und sie als Merkmalwo_Log () anrufen:

$ test = neuer Test (); $ test-> log (); Ich bin eine Methode des Mabelsones! $ test-> Merkmalwo_log (); Ich bin eine Methode des Merkmals!
Kopieren

Verwenden des AS -Operators, um die Sichtbarkeit einer Merkmalsmethode zu ändern

In einer Klasse die als Der Bediener kann auch verwendet werden, um die Sichtbarkeit einer Methode zu ändern, die als Teil eines Merkmals importiert wurde. Im vorherigen Beispiel sind alle Methoden der Merkmale öffentlich. Wir können dies in der Klasse ändern:

Klassentest verwenden Dreitone log als geschützt; 
Kopieren

Mit der obigen Syntax haben wir angegeben, dass die Protokollmethode von „Treitone“ verwendet werden sollte als geschützt Auch wenn es ursprünglich mit einem deklariert wurde öffentlich Sichtweite. Wenn wir versuchen, die Protokollmethode aufzurufen, erhalten wir einen Fehler:

$ test = neuer Test (); $ test-> log (); PHP -WARNUNG: Unbekundeter Fehler: Aufrufen nach geschützter Methode test :: log () aus dem Kontext "in PHP -Shell -Code: 1 
Kopieren

Wenn wir einen Namen für den Alias ​​angeben, wird die Sichtbarkeitsänderung auf die aliased -Methode angewendet, während der ursprüngliche seine Sichtbarkeit beibehält:

Klasse test verwenden Sie Dreitone log as Protected aliased_log;  $ test = new Test (); $ test-> log (); Ich bin eine Methode des Mabelsones! $ test-> aliased_log (); PHP -WARNUNG: Unbekundeter Fehler: Rufen Sie nach Protected Method Test :: Aliased_log () aus dem Kontext "in PHP -Shell -Code: 1
Kopieren

Abstrakte und statische Methoden in einem Merkmal

In einem Merkmal können wir beide definieren abstrakt Und statisch Methoden. Im ersten Fall erfordert das Merkmal die Klasse, die sie verwendet, um eine konkrete Implementierung der Methode bereitzustellen. Ein fataler Fehler wird generiert, wenn die Klasse die Methode nicht implementiert oder nicht als abstrakt deklariert wird:

Kopieren

Eine Merkmalsmethode kann auch deklariert und verwendet werden als als statisch:

Kopieren

Merkmalseigenschaften

Nicht nur Methoden, sondern auch Eigenschaften können in Merkmalen definiert werden, sondern die einzige Regel, die respektiert Gleiche Sichtbarkeit und Anfangswert. Hier ist ein Beispiel:

Kopieren

Der $ Name Die Eigenschaft ist in "Dreitone" und auch in der "Test" -Klasse definiert. Beide haben die gleiche Sichtbarkeit (geschützt), aber ihr Anfangswert ist unterschiedlich, daher werden sie als inkompatibel angesehen, und dies führt zu einem tödlichen Fehler.

Gedanken schließen

In diesem Artikel haben wir gelernt zu wissen Züge, Eine Funktion, die die Wiederverwendung der Code in PHP verbessert. Wir haben gesehen, wie Merkmale nicht instanziiert werden können, sondern nur in Klassen verwendet werden, über die verwenden Stichwort. Wir haben gesehen, was die Vorrangreihenfolge ist, die bei einem Merkmal und der Klasse verwendet wird, die es in den Implementierungsmethoden mit demselben Namen verwendet wird anstatt Operator und wie man Aliase für die Merkmalsmethoden erstellt und wie es möglich ist, ihre Sichtbarkeit mit dem zu ändern als Operator.

Schließlich haben wir gesehen, wie es auch möglich ist, Eigenschaften und statische oder abstrakte Methoden in einem Merkmal zu definieren. Ich möchte mehr über PHP erfahren? Wir haben viele Artikel zu diesem Thema!

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • So erstellen Sie eine Tkinter -Anwendung mithilfe eines objektorientierten…
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Wie man mit der Woocommerce -REST -API mit Python arbeitet
  • Wie man die Festplattenleistung unter Linux bewertet
  • So erstellen Sie einen Docker -basierten Lampenstapel mit Docker auf…
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Dinge zu installieren auf Ubuntu 22.04
  • Wie man Nautilus-Erweiterungen mit Nautilus-Python schreibt
  • Wie man ein Signal an Kinderprozesse aus einer Bash verbreitet…