Inhaltsverzeichnis
Trait简介
单继承结构
示例源码
创建Trait
使用Trait
引入位置
编译问题
Einführung in Trait
Einfache Vererbungsstruktur
Beispielquellcode
🎜🎜 Was wir durch die trait-Deklaration definieren, ist ein Trait, und dann können wir die Eigenschaften und Methoden definieren, die in diesem Trait wie in einer Klasse verwendet werden sollen. 🎜🎜Darüber hinaus unterstützen Traits die Verschachtelung und Kombination, d. h. ein oder mehrere Traits (mehrere werden durch getrennt) werden zu einem Trait zusammengefasst, z. B. AuthenticatesUsers: 🎜🎜Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird🎜🎜Hinweis: Trait unterstützt auch Definitionen Abstrakte Methoden und statische Methoden, wobei eine abstrakte Methode in der Klasse implementiert werden muss, die sie verwendet. 🎜🎜Priorität der aufrufenden Methode: 🎜🎜Aufrufende Klasse>Eigenschaft>Übergeordnete Klasse (falls vorhanden), Methoden können überschrieben werden, Attribute jedoch nicht. 🎜🎜Hinweis: Wenn ein Attribut in Trait definiert ist, wird ein Fehler gemeldet, wenn dieses Attribut auch in der aufrufenden Klasse definiert ist. 🎜

Trait verwenden" >Eigenschaft erstellen h2>🎜 Das Erstellen eines Merkmals ist sehr einfach wie das Erstellen einer Klasse, außer dass das verwendete Schlüsselwort trait anstelle von class ist als Beispiel: 🎜🎜 Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird🎜🎜 Was wir durch die trait-Deklaration definieren, ist ein Trait, und dann können wir die Eigenschaften und Methoden definieren, die in diesem Trait wie in einer Klasse verwendet werden sollen. 🎜🎜Darüber hinaus unterstützen Traits die Verschachtelung und Kombination, d. h. ein oder mehrere Traits (mehrere werden durch getrennt) werden zu einem Trait zusammengefasst, z. B. AuthenticatesUsers: 🎜🎜Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird🎜🎜Hinweis: Trait unterstützt auch Definitionen Abstrakte Methoden und statische Methoden, wobei eine abstrakte Methode in der Klasse implementiert werden muss, die sie verwendet. 🎜🎜Priorität der aufrufenden Methode: 🎜🎜Aufrufende Klasse>Eigenschaft>Übergeordnete Klasse (falls vorhanden), Methoden können überschrieben werden, Attribute jedoch nicht. 🎜🎜Hinweis: Wenn ein Attribut in Trait definiert ist, wird ein Fehler gemeldet, wenn dieses Attribut auch in der aufrufenden Klasse definiert ist. 🎜

Trait verwenden

Einführungsort
Kompilierungsprobleme
Heim Backend-Entwicklung PHP-Tutorial Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird

Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird

Mar 01, 2022 am 10:56 AM
php trait

Wie kann man den Fluch der Einzelvererbung in PHP brechen? Der folgende Artikel stellt Ihnen vor, wie Sie Trait zur Lösung des Einzelvererbungsproblems in PHP verwenden können. Ich hoffe, er wird Ihnen hilfreich sein.

Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird

Wir alle wissen, dass PHP eine einzige Vererbungssprache ist, aber manchmal haben unsere beiden Klassen, die nichts mit dem Geschäft zu tun haben, ähnliche Verhaltensweisen. Wie können wir DRY (Don't Repeat Yourself) elegant erreichen?

Die Antwort ist die Einführung von TraitTrait

Trait简介

Trait是PHP 5.4引入的新概念,看上去既像类又像接口。【推荐学习:《PHP视频教程》】

其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中。

Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

Trait作用

  • 表明类可以做什么;

  • 提供模块化实现。

单继承结构

开篇我就提到了PHP是单继承语言,我们通常的习惯是:

  • 先编写一个通用的基类,实现基本的功能,进行通用逻辑的封装,然后扩展这个基类;

  • 然后再创建更具体的子类,直接从父类继承实现。

这叫方式就是单继承层次结构,很多编程语言都使用这个模式。

大多数时候这种典型的继承模型能够良好运作,但是如果想让两个无关的PHP类具有类似的行为,应该怎么做呢?

示例源码

我查询了Laravel的源码,以自带的LoginController为例,其中的登录认证就是通过Trait实现:

Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird

创建Trait

创建Trait很简单,跟创建类有点类似,只不过使用的关键字是trait而不是class,以上述的AuthenticatesUsers为例:

Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird

我们通过trait声明定义的是一个Trait,然后我们可以在这个Trait中像类一样定义要使用的属性和方法。

此外Trait支持嵌套和组合,即通过一个或多个Trait(多个用,分隔)组合成一个Trait,比如AuthenticatesUsers就是如此:

Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird

注意:Trait中还支持定义抽象方法和静态方法,其中抽象方法必须在使用它的类中实现。

调用方法的优先级:

调用类>Trait>父类(如果有的话),方法可以覆盖,但属性不行。

注意:如果Trait中定义了一个属性,如果调用类中也定义这个属性则会报错。

使用Trait

Trait的使用方法也很简单,上面的截图示例中已经显示的很清楚明了:使用use关键字。

引入位置

注意:命名空间和Trait使用的都是use关键字引入,不同之处在于导入位置,命名空间在类的定义体外导入,而Trait在类的定义体内导入

Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird

编译问题

如果Trait和引用Trait的类有相同的属性和方法,我们再外部调用时需要使用instansof

Einführung in Trait

Trait ist ein neues Konzept, das in PHP 5.4 eingeführt wurde und sowohl wie eine Klasse aussieht und eine Schnittstelle. [Empfohlenes Lernen: „PHP-Video-Tutorial

"]

Tatsächlich ist es so Ist weder das eine noch das andere, können Traits als Teilimplementierungen von Klassen angesehen werden, die in eine oder mehrere vorhandene PHP-Klassen gemischt werden können. Trait ist eine Code-Wiederverwendungstechnologie, die einen flexiblen Code-Wiederverwendungsmechanismus für die Einzelvererbungsbeschränkung von PHP bietet.

🎜Merkmalsfunktion🎜
  • 🎜Zeigt an Klasse Was kann getan werden? 🎜
  • 🎜Stellen Sie eine modulare Implementierung bereit. 🎜

Einfache Vererbungsstruktur

🎜Ich habe am Anfang erwähnt, dass PHP eine einzelne Vererbungssprache ist. Unsere übliche Gewohnheit ist: 🎜
  • 🎜Schreiben Sie zuerst eine allgemeine Basisklasse, um Grundfunktionen zu implementieren, kapseln Sie die allgemeine Logik und erweitern Sie dann diese Basisklasse;🎜
  • 🎜Dann Erstellen Sie eine weitere spezifische Unterklasse, die die Implementierung direkt von der übergeordneten Klasse erbt. 🎜
🎜Diese Methode wird als Einzelvererbungshierarchie bezeichnet und viele Programmiersprachen verwenden dieses Muster. 🎜🎜Dieses typische Vererbungsmodell funktioniert die meiste Zeit gut, aber was ist, wenn Sie möchten, dass sich zwei nicht verwandte PHP-Klassen ähnlich verhalten? 🎜

Beispielquellcode

🎜Ich habe den Quellcode von Laravel überprüft und den integrierten LoginController als Beispiel genommen. Die Anmeldeauthentifizierung wird durch Trait implementiert: 🎜🎜Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird🎜

Eigenschaft erstellen h2>🎜 Das Erstellen eines Merkmals ist sehr einfach wie das Erstellen einer Klasse, außer dass das verwendete Schlüsselwort trait anstelle von class ist als Beispiel: 🎜🎜 Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird🎜🎜 Was wir durch die trait-Deklaration definieren, ist ein Trait, und dann können wir die Eigenschaften und Methoden definieren, die in diesem Trait wie in einer Klasse verwendet werden sollen. 🎜🎜Darüber hinaus unterstützen Traits die Verschachtelung und Kombination, d. h. ein oder mehrere Traits (mehrere werden durch getrennt) werden zu einem Trait zusammengefasst, z. B. AuthenticatesUsers: 🎜🎜Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird🎜🎜Hinweis: Trait unterstützt auch Definitionen Abstrakte Methoden und statische Methoden, wobei eine abstrakte Methode in der Klasse implementiert werden muss, die sie verwendet. 🎜🎜Priorität der aufrufenden Methode: 🎜🎜Aufrufende Klasse>Eigenschaft>Übergeordnete Klasse (falls vorhanden), Methoden können überschrieben werden, Attribute jedoch nicht. 🎜🎜Hinweis: Wenn ein Attribut in Trait definiert ist, wird ein Fehler gemeldet, wenn dieses Attribut auch in der aufrufenden Klasse definiert ist. 🎜

Trait verwenden

🎜Die Methode zur Verwendung von Trait ist ebenfalls sehr einfach. Das Screenshot-Beispiel oben hat es sehr deutlich gezeigt: Verwenden Sie useSchlüsselwörter. 🎜

Einführungsort

🎜Hinweis: Namespaces und Merkmale werden beide mit dem Schlüsselwort use eingeführt. Der Unterschied liegt im Importort, Namespaces werden außerhalb der Klassendefinition importiert, während Merkmale innerhalb der Klassendefinition importiert werden. 🎜🎜Ausführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird🎜

Kompilierungsprobleme

🎜Wenn ein Trait dieselben Eigenschaften und Methoden hat wie die Klasse, die auf das Trait verweist, müssen wir das Schlüsselwort instansof verwenden, um anzugeben, dass das Methode ist eine Klasse, wenn sie extern aufgerufen wird. Es ist immer noch Trait. 🎜🎜Da der PHP-Interpreter Traits während der Kompilierung in den Definitionskörper der Klasse kopiert, die durch diesen Vorgang verursachten Inkompatibilitätsprobleme jedoch nicht behandelt, müssen wir die Kompatibilitätsprobleme lösen. 🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Programmierunterricht🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie Trait zur Lösung des Einzelvererbungsproblems in PHP verwendet wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles