In diesem Artikel erfahren Sie, wie Sie die Trait-Funktion in PHP nutzen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Ich glaube, jeder kennt Merkmale. Bereits in 5.4 sind Merkmale in den neuen Funktionen von PHP aufgetaucht. Natürlich bedeutet Trait selbst auch Feature, aber die Hauptfunktion dieses Features besteht in der Wiederverwendung von Code.
Wir alle wissen, dass PHP eine moderne objektorientierte Sprache ist. Um das verwirrende Problem der Mehrfachvererbung in C++ zu lösen, liegen die meisten Sprachen in Form einer Einzelvererbung und mehrerer Schnittstellen vor. Dies führt jedoch auch dazu, dass wiederverwendbarer Code durch Kombination implementiert werden muss , es ist unvermeidlich Um eine Klasse zu instanziieren oder eine statische Methode zu verwenden, erhöht sich die Speichernutzung. Um dieses Problem zu lösen, hat PHP die Trait-Funktion offiziell eingeführt. Man kann es sich als eine Variation von Combo-Fähigkeiten vorstellen.
trait A { public $a = 'A'; public function testA() { echo 'This is ' . $this->a; } } class classA { use A; } class classB { use A; public function __construct() { $this->a = 'B'; } } $a = new classA(); $b = new classB(); $a->testA(); $b->testA();
Aus dem obigen Code können wir ersehen, dass Merkmale auf jede Klasse angewendet und Variablen definiert werden können, was sehr praktisch ist. Das Wichtigste, was Sie bei Merkmalen beachten sollten, ist die Überladungspriorität von Methoden mit demselben Namen.
trait B { function test(){ echo 'This is trait B!'; } } trait C { function test(){ echo 'This is trait C!'; } } class testB{ use B, C; function test(){ echo 'This is class testB!'; } } $b = new testB(); $b->test(); // This is class testB! // class testC{ // use B, C; // } // $c = new testC(); // $c->test(); // Fatal error: Trait method test has not been applied, because there are collisions with other trait methods on testC
Hier ist die test()-Methode in unserer Klasse überladen, und was hier ausgegeben wird, ist die Methode in der Klasse. Wenn Sie die Methode test() in der Klasse testB auskommentieren, wird ein Fehler gemeldet. Weil das Programm nicht unterscheiden kann, welche test()-Methode des Merkmals Sie verwenden möchten. Wir können stattdessen verwenden, um anzugeben, welches Merkmal die zu verwendende Methode aufgerufen wird.
class testE{ use B, C { B::test insteadOf C; C::test as testC; } } $e = new testE(); $e->test(); // This is trait B! $e->testC(); // This is trait C!
Natürlich sollten wir in der tatsächlichen Entwicklung versuchen, Methodennamen zu standardisieren, um solche Duplikate zu vermeiden. Was passiert außerdem, wenn die Unterklasse auf ein Merkmal verweist und die übergeordnete Klasse dieselbe Methode definiert? Natürlich werden weiterhin die von der übergeordneten Klasse geerbten Methoden aufgerufen. Die Priorität von Merkmalen ist niedriger als die der normalen Klassenvererbung.
trait D{ function test(){ echo 'This is trait D!'; } } class parentD{ function test(){ echo 'This is class parentD'; } } class testD extends parentD{ use D; } $d = new testD(); $d->test(); // This is trait D!
Abstrakte Methoden können schließlich auch in Merkmalen definiert werden. Diese abstrakte Methode muss von der Klasse implementiert werden, die auf dieses Merkmal verweist, und hat den gleichen Effekt wie die abstrakte Methode in der abstrakten Klasse.
trait F{ function test(){ echo 'This is trait F!'; } abstract function show(); } class testF{ use F; function show(){ echo 'This is class testF!'; } } $f = new testF(); $f->test(); $f->show();
trait ist wirklich eine sehr flexible Funktion von PHP. Je flexibler etwas ist, desto mehr müssen wir natürlich einige seiner Nutzungsregeln herausfinden, um unvorhergesehene Fehler zu vermeiden.
Testcode:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/trait%E8%83%BD%E5%8A%9B%E5%9C%A8PHP%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8.php
Empfohlenes Lernen: php-Video-Tutorial
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Trait-Funktionen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!