Heim Backend-Entwicklung PHP-Tutorial Verwendung und Beispiele von Trait in PHP

Verwendung und Beispiele von Trait in PHP

Jan 29, 2020 pm 10:21 PM
trait

Verwendung und Beispiele von Trait in PHP

PHP ist eine Sprache mit einfacher Vererbung. Um dieses Problem zu lösen, konnten PHP-Klassen nicht gleichzeitig Eigenschaften oder Methoden von zwei Basisklassen erben Problem, PHP hat Traits eingeführt. (Die Kombinationsfunktion der Traits- und Go-Sprache ist etwas ähnlich)

Verwendung: Verwenden Sie das Schlüsselwort use in der Klasse, um den zu kombinierenden Trait-Namen zu deklarieren, und die Deklaration eines bestimmten Traits verwendet das Schlüsselwort trait und Das Merkmal kann nicht direkt instanziiert werden.

<?php
trait Drive {
    public $carName = &#39;BMW&#39;;
    public function driving() {
        echo "driving {$this->carName}\n";
    }
}
 
class Person {
    public function age() {
        echo "i am 18 years old\n";
    }
}
 
class Student extends Person {
    use Drive;
    public function study() {
        echo "Learn to drive \n";
    }
}
 
$student = new Student();
$student->study();  //输出:Learn to drive 
$student->age();    //输出:i am 18 years old
$student->driving();//输出:driving BMW
Nach dem Login kopieren

Schlussfolgerung:

Die Student-Klasse erbt Person und verfügt über die Altersmethode

Durch die Kombination von Drive verfügt sie über die Fahrmethode und das Attribut carName.

Wenn es in Trait, Basisklasse und dieser Klasse eine Eigenschaft oder Methode mit demselben Namen gibt, welche wird am Ende beibehalten? Testen Sie es mit dem folgenden Code:

<?php
 
trait Drive {
    public function hello() {
        echo "hello 周伯通\n";
    }
    public function driving() {
        echo "周伯通不会开车\n";
    }
}
 
class Person {
    public function hello() {
        echo "hello 大家好\n";
    }
    public function driving() {
        echo "大家都会开车\n";
    }
}
 
class Student extends Person {
    use Drive;//trait 的方法覆盖了基类Person中的方法,所以Person中的hello 和driving被覆盖
    public function hello() {
        echo "hello 新学员\n";//当方法或属性同名时,当前类中的方法会覆盖 trait的 方法,所以此处hello会覆盖trait中的
        hello
    }
}
 
$student = new Student();
$student->hello();    //输出:hello 新学员
$student->driving();  //输出:周伯通不会开车
Nach dem Login kopieren

Schlussfolgerung: Wenn eine Methode oder ein Attribut denselben Namen hat, überschreibt die Methode in der aktuellen Klasse die Methode des Merkmals und die Methode des Merkmals überschreibt die Methode in der Basisklasse .

Wenn Sie mehrere Traits kombinieren möchten, trennen Sie die Trait-Namen durch Kommas:

verwenden Sie Trait1, Trait2;

Was passiert, wenn mehrere Traits Methoden oder Eigenschaften mit denselben Eigenschaften enthalten? Name? Wolltuch? Die Antwort lautet: Wenn mehrere kombinierte Merkmale Eigenschaften oder Methoden mit demselben Namen enthalten, müssen diese explizit deklariert werden, um Konflikte zu lösen, da andernfalls ein schwerwiegender Fehler auftritt.

<?php
trait Trait1 {
    public function hello() {
        echo "Trait1::hello\n";
    }
    public function hi() {
        echo "Trait1::hi\n";
    }
}
 
trait Trait2 {
    public function hello() {
        echo "Trait2::hello\n";
    }
    public function hi() {
        echo "Trait2::hi\n";
    }
}
 
class Class1 { 
    use Trait1, Trait2;
}
 
//输出:Fatal error:  Trait method hello has not been applied, because there are collisions with other trait
 methods on Class1 in
Nach dem Login kopieren

Verwenden Sie die Operatoren „sstatt statt“ und „as“, um Konflikte zu lösen, während „as“ der Methode einen Alias ​​gibt:

<?php
trait Trait1 {
    public function hello() {
        echo "Trait1::hello \n";
    }
    public function hi() {
        echo "Trait1::hi \n";
    }
}
trait Trait2 {
    public function hello() {
        echo "Trait2::hello\n";
    }
    public function hi() {
        echo "Trait2::hi\n";
    }
}
class Class1 {
    use Trait1, Trait2 {
        Trait2::hello insteadof Trait1;
        Trait1::hi insteadof Trait2;
    }
}
 
class Class2 {
    use Trait1, Trait2 {
        Trait2::hello insteadof Trait1;
        Trait1::hi insteadof Trait2;
        Trait2::hi as hei;
        Trait1::hello as hehe;
    }
}
 
$Obj1 = new Class1();
$Obj1->hello();
$Obj1->hi();
echo "\n";
$Obj2 = new Class2();
$Obj2->hello();
$Obj2->hi();
$Obj2->hei();
$Obj2->hehe();
Nach dem Login kopieren

Ausgabe

Trait2::hello
Trait1::hi 
 
Trait2::hello
Trait1::hi 
Trait2::hi
Trait1::hello
Nach dem Login kopieren
<?php
trait Hello {
    public function hello() {
        echo "hello,我是周伯通\n";
    }
}
class Class1 {
    use Hello {
        hello as protected;
    }
}
class Class2 {
    use Hello {
        Hello::hello as private hi;
    }
}
$Obj1 = new Class1();
$Obj1->hello(); # 报致命错误,因为hello方法被修改成受保护的
 
$Obj2 = new Class2();
$Obj2->hello(); # 输出: hello,我是周伯通,因为原来的hello方法仍然是公共的
$Obj2->hi();  # 报致命错误,因为别名hi方法被修改成私有的
Nach dem Login kopieren
Uncaught Error: Call to protected method Class1::hello() from context &#39;&#39; in D:\web\mytest\p.php:18
Nach dem Login kopieren

Trait unterstützt abstrakte Methoden, statische Eigenschaften und statische Methoden:

<?php
trait Hello {
    public function sayHello() {
        echo "Hello 我是周伯通\n";
    }
}
 
trait World {
    use Hello;
    public function sayWorld() {
        echo "hello world\n";
    }
    abstract public function getWorld();
    public function inc() {
        static $c = 0;
        $c = $c + 1;
        echo "$c\n";
    }
    public static function doSomething() {
        echo "Doing something\n";
    }
}
 
class HelloWorld {
    use World;
    public function getWorld() {
        return &#39;do you get World ?&#39;;
    }
}
 
$Obj = new HelloWorld();
$Obj->sayHello();
$Obj->sayWorld();
echo $Obj->getWorld() . "\n";
HelloWorld::doSomething();
$Obj->inc();
$Obj->inc();
Nach dem Login kopieren

Ausgabe

Hello 我是周伯通
hello world
do you get World ?
Doing something12
Nach dem Login kopieren


Das obige ist der detaillierte Inhalt vonVerwendung und Beispiele von Trait in PHP. 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ßer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

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-Merkmal DTO: Vereinfachung der Entwicklung von Datenübertragungsobjekten PHP-Merkmal DTO: Vereinfachung der Entwicklung von Datenübertragungsobjekten Oct 12, 2023 am 09:04 AM

PHPtraitDTO: Vereinfachung der Entwicklung von Datenübertragungsobjekten Einführung: In der modernen Softwareentwicklung spielen Datenübertragungsobjekte (kurz DataTransferObject, DTO) eine wichtige Rolle. DTO ist ein reiner Datencontainer, der zum Übertragen von Daten zwischen Schichten verwendet wird. Während des Entwicklungsprozesses müssen Entwickler jedoch eine große Menge ähnlichen Codes schreiben, um DTOs zu definieren und zu betreiben. Um diesen Prozess zu vereinfachen, wurde die Trait-Funktion in PHP eingeführt. Wir können die Trait-Funktion dazu verwenden

Vertiefendes Verständnis der Entwurfsmuster und -praktiken von PHP Trait DTO Vertiefendes Verständnis der Entwurfsmuster und -praktiken von PHP Trait DTO Oct 12, 2023 am 08:48 AM

Vertiefendes Verständnis der Designmuster und -praktiken von PHPtraitDTO Einführung: In der PHP-Entwicklung sind Designmuster ein wesentlicher Bestandteil. Unter diesen ist DTO (DataTransferObject) ein häufig verwendetes Entwurfsmuster zum Kapseln von Datenübertragungsobjekten. Bei der Implementierung von DTO kann die Verwendung von Merkmalen (Features) die Wiederverwendbarkeit und Flexibilität des Codes effektiv verbessern. Dieser Artikel befasst sich mit den Entwurfsmustern und -praktiken von traitDTO in PHP

PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses Oct 12, 2023 pm 03:10 PM

PHPtraitDTO: Ein wichtiges Tool zur Optimierung des Datenübertragungsprozesses. Es sind spezifische Codebeispiele erforderlich. Einführung: Während des Entwicklungsprozesses ist die Datenübertragung eine sehr häufige Anforderung, insbesondere wenn Daten zwischen verschiedenen Ebenen übertragen werden. Bei der Übermittlung dieser Daten müssen wir die Daten häufig verarbeiten, überprüfen oder konvertieren, um unterschiedliche Geschäftsanforderungen zu erfüllen. Um die Lesbarkeit und Wartbarkeit des Codes zu verbessern, können wir zur Optimierung PHPtraitDTO (DataTransferObject) verwenden

PHP-Merkmal DTO: Erzielung von Einfachheit und Flexibilität bei Datenübertragungsobjekten PHP-Merkmal DTO: Erzielung von Einfachheit und Flexibilität bei Datenübertragungsobjekten Oct 12, 2023 am 10:21 AM

PHPtraitDTO: Einfachheit und Flexibilität von Datenübertragungsobjekten implementieren Einführung: Im PHP-Entwicklungsprozess sind häufig die Datenübertragung und -verarbeitung beteiligt. Das DataTransferObject (kurz DTO) ist ein Entwurfsmuster, das zur Übertragung von Daten zwischen verschiedenen Schichten verwendet wird. Während des Übertragungsprozesses vereinfacht DTO Datenoperationen durch die Kapselung von Daten und die Bereitstellung öffentlicher Zugriffsmethoden. In diesem Artikel wird erläutert, wie Sie PHPtrait zur Implementierung von DT verwenden

PHP-Merkmal DTO: elegantes Datenübertragungsobjektmuster PHP-Merkmal DTO: elegantes Datenübertragungsobjektmuster Oct 12, 2023 am 08:34 AM

PHPtraitDTO: Elegant Data Transfer Object Pattern Übersicht: Data Transfer Object (kurz DTO) ist ein Entwurfsmuster, das zum Übertragen von Daten zwischen verschiedenen Ebenen verwendet wird. In Anwendungen ist es häufig erforderlich, Daten von einer Datenbank oder einem externen Dienst abzurufen und sie zwischen verschiedenen Schichten der Anwendung weiterzugeben. Der DTO-Modus kann die Datenübertragung prägnanter und klarer gestalten und erleichtert außerdem die Erweiterung und Wartung. In PHP können wir Merkmale verwenden, um DTO zu implementieren

Implementieren Sie ein hochgradig anpassbares Datenübertragungs-Framework mithilfe des PHP-Trait-DTO Implementieren Sie ein hochgradig anpassbares Datenübertragungs-Framework mithilfe des PHP-Trait-DTO Oct 12, 2023 pm 12:46 PM

Implementierung eines hochgradig anpassbaren Datenübertragungs-Frameworks mit PHPtraitDTO Da Websites und Anwendungen immer komplexer werden, wird die Datenübertragung immer wichtiger. In PHP kann die Verwendung von DataTransferObject (kurz DTO) zur Abwicklung der Datenübertragung den Code erheblich vereinfachen und die Wartbarkeit und Skalierbarkeit verbessern. In diesem Artikel wird erläutert, wie Sie mit PHPtrait und DTO ein hochgradig anpassbares Datenübertragungs-Framework implementieren und entsprechende Codebeispiele bereitstellen.

PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses Oct 12, 2023 am 09:27 AM

PHPtraitDTO: Ein wichtiges Tool zur Optimierung des Datenübertragungsprozesses. Im Entwicklungsprozess sind spezifische Codebeispiele erforderlich. Die effiziente Übertragung von Daten ist zu einem der Probleme geworden, die Entwickler lösen müssen. In der PHP-Sprache kann die Verwendung von traitDTO (DataTransferObject) den Datenübertragungsprozess optimieren und die Effizienz der Datenübertragung verbessern. In diesem Artikel wird vorgestellt, was TraitDTO ist und wie man es zur Optimierung des Datenübertragungsflusses verwendet

Wie erweitere ich benutzerdefinierte PHP-Funktionen mithilfe von Merkmalen? Wie erweitere ich benutzerdefinierte PHP-Funktionen mithilfe von Merkmalen? Apr 23, 2024 am 09:27 AM

Wie erweitere ich benutzerdefinierte PHP-Funktionen mithilfe von Merkmalen? Definieren Sie ein Merkmal, das Erweiterungsmethoden enthält. Verwenden Sie das Schlüsselwort use, um Merkmale in benutzerdefinierte Funktionen einzuschließen. Greifen Sie über $this in benutzerdefinierten Funktionen auf Trait-Methoden zu.

See all articles