Traits in PHP 5.4 ist eine neu eingeführte Funktion. Ich weiß wirklich nicht, wie ich sie genau ins Chinesische übersetzen soll. Sein eigentlicher Zweck besteht darin, in manchen Situationen Mehrfachvererbung zu verwenden, aber PHP verfügt nicht über Mehrfachvererbung, also wurde so etwas erfunden.
Traits können als eine Reihe von Methoden verstanden werden, die von verschiedenen Klassen aufgerufen werden können, aber Traits sind keine Klassen! Kann nicht instanziiert werden. Schauen wir uns zunächst die Syntax anhand eines Beispiels an:
<?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //然后是调用这个traits,语法为: class myClass{ use myTrait; } //这样就可以通过use myTraits,调用Traits中的方法了,比如: $obj = new myClass(); $obj-> traitMethod1 (); $obj-> traitMethod2 ();
Als nächstes untersuchen wir, warum Merkmale verwendet werden. Es gibt beispielsweise zwei Klassen, nämlich „business“ (Geschäftsperson) und „Individuum“ (Einzelperson). Der herkömmliche Ansatz besteht darin, eine übergeordnete Klasse so zu abstrahieren, dass beide Klassen gemeinsame Merkmale haben, z. B. „Client“, und die Zugriffsattribute „Adresse“, „Geschäft“ und „Person“ in der Client-Klasse so festzulegen, dass sie diese erben, wie im Folgenden gezeigt Code:
// Class Client class Client { private $address; public getAddress() { return $this->address; } public setAddress($address) { $this->address = $address; } } class Business extends Client{ //这里可以使用address属性 } // Class Individual class Individual extends Client{ //这里可以使用address属性 }
Aber was ist, wenn es eine andere Klasse namens order gibt, die auf dasselbe Adressattribut zugreifen muss? Die Auftragsklasse kann die Client-Klasse nicht erben, da dies nicht den Prinzipien von OOP entspricht. Zu diesem Zeitpunkt sind Merkmale hilfreich. Sie können ein Merkmal definieren, um diese öffentlichen Eigenschaften zu definieren.
// Trait Address trait Address{ private $address; public getAddress() { eturn $this->address; } public setAddress($address) { $this->address = $address; } } // Class Business class Business{ use Address; // 这里可以使用address属性 } // Class Individual class Individual{ use Address; //这里可以使用address属性 } // Class Order class Order{ use Address; //这里可以使用address属性 }