Dieses Mal werde ich Ihnen die Schritte zur Verwendung von Traits zur Code-Wiederverwendung ausführlich erläutern. Was sind die Vorsichtsmaßnahmen für die Verwendung von Traits zur Code-Wiederverwendung?
Ab PHP Version 5.4.0 bietet PHP ein neues Konzept der Code-Wiederverwendung, nämlich Trait. Trait bedeutet wörtlich „Merkmale“ und „Merkmale“. Wir können verstehen, dass die Verwendung des Schlüsselworts Trait den Klassen in PHP neue Merkmale hinzufügen kann.
Jeder, der sich mit Objektorientiert auskennt, weiß, dass es in der Softwareentwicklung häufig zwei Methoden zur Code-Wiederverwendung gibt: Vererbung und Polymorphismus. In PHP kann nur eine einzelne Vererbung erreicht werden. Eigenschaften vermeiden dies. Das Folgende ist eine vergleichende Erklärung anhand eines einfachen Beispiels.
1. Vererbung vs. Polymorphismus vs. Merkmal
Es gibt jetzt zwei Klassen: Publish.php und Answer.php. Um die LOG-Funktion hinzuzufügen, zeichnen Sie die Aktionen innerhalb der Klasse auf. Es gibt mehrere Möglichkeiten:
Vererbung
Polymorphismus
Merkmal
1.1. Die geerbte
Codestruktur ist wie folgt:
// Log.php<?phpClass Log{ publicfunctionstartLog() { // echo ... } publicfunctionendLog() { // echo ... }} // Publish.php<?phpClass PublishextendsLog{} // Answer.php<?phpClass AnswerextendsLog{}
1.2. Polymorpher
Implementierungscode:
// Log.php<?phpInterface Log{ publicfunctionstartLog(); publicfunctionendLog();} // Publish.php<?phpClass PublishimplementsLog{ publicfunctionstartLog() { // TODO: Implement startLog() method. } publicfunctionendLog() { // TODO: Implement endLog() method. }} // Answer.php<?phpClass AnswerimplementsLog{ publicfunctionstartLog() { // TODO: Implement startLog() method. } publicfunctionendLog() { // TODO: Implement endLog() method. }}
1.3. Der Implementierungscode von Trait
ist wie folgt:
// Log.php<?phptrait Log{ publicfunctionstartLog() { // echo .. } publicfunctionendLog() { // echo .. }} // Publish.php<?phpclassPublish { useLog;}$publish=newPublish();$publish->startLog();$publish->endLog(); // Answer.php<?phpclassAnswer { useLog;}$answer=newAnswer();$answer->startLog();$answer->endLog();
1.4. Fazit
Vererbung kann das Problem auch lösen Problem, aber seine Idee verstößt gegen das objektorientierte Prinzip und scheint sehr grob zu sein. Die polymorphe Methode entspricht jedoch nicht dem DRY-Prinzip in der Softwareentwicklung und erhöht die Wartungskosten. Die Trait-Methode vermeidet die oben genannten Mängel und erreicht die Wiederverwendung von Code relativ elegant.
2. Umfang von Trait
Nachdem wir die Vorteile von Trait verstanden haben, müssen wir zunächst über den Umfang sprechen. Dies ist einfacher zu beweisen. Der Implementierungscode lautet wie folgt:
<?phpclassPublish { useLog; publicfunctiondoPublish() { $this->publicF(); $this->protectF(); $this->privateF(); }} $publish=newPublish();$publish->doPublish(); publicfunctionprotectedfunctionprivatefunction
Sie können feststellen, dass der Umfang von Trait in der Referenz
|
Wenn es um die Priorität geht, muss es ein Referenzobjekt zum Vergleich geben. Das Referenzobjekt bezieht sich hier auf die Trait-Klasse und ihre übergeordnete Klasse.
<?phptrait Log{ publicfunctionpublicF() { echoMETHOD.' public function'. PHP_EOL; } protectedfunctionprotectF() { echoMETHOD.' protected function'. PHP_EOL; }}classQuestion{ publicfunctionpublicF() { echoMETHOD.' public function'. PHP_EOL; } protectedfunctionprotectF() { echoMETHOD.' protected function'. PHP_EOL; }}classPublishextendsQuestion{ useLog; publicfunctionpublicF() { echoMETHOD.' public function'. PHP_EOL; } publicfunctiondoPublish() { $this->publicF(); $this->protectF(); }} $publish=newPublish();$publish->doPublish(); 上述代码的输出结果如下: Publish::publicFpublicfunctionLog::protectFprotectedfunction
trait Override the geerbte Methode
Klassenmitgliedspriorität ist: aktuelle Klasse>Merkmal> Elternklasse
verwendet das Schlüsselwort „use“, wenn auf Trait verwiesen wird, und das Schlüsselwort „use“ wird auch verwendet, um auf den Namespace
zu verweisen. Der Unterschied zwischen den beiden besteht darin, dass Trait beim Verweisen innerhalb der Klasse verwendet wird.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.
Empfohlene Lektüre:
So entfernen Sie Nullwerte oder leere Elemente in einem Array in PHP
php implementiert eine Protokollierungsfunktion
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Schritte zur Verwendung von Merkmalen zur Codewiederverwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!