Heim >Backend-Entwicklung >PHP-Tutorial >Ausführliche Erläuterung der Schritte zur Verwendung von Merkmalen zur Codewiederverwendung

Ausführliche Erläuterung der Schritte zur Verwendung von Merkmalen zur Codewiederverwendung

php中世界最好的语言
php中世界最好的语言Original
2018-04-11 11:54:211613Durchsuche

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:

  1. Vererbung

  2. Polymorphismus

  3. 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
可以发现,Trait的作用域在引用该Trait类的内部是都可见的。可以理解为use关键字将Trait的实现代码Copy了一份到引用该Trait的类中。

der Trait-Klasse sichtbar ist. Es versteht sich, dass das Schlüsselwort use den Implementierungscode des Merkmals in die Klasse kopiert, die auf das Merkmal verweist.

3. Priorität der Attribute im Merkmal

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.&#39; public function&#39;. PHP_EOL; } protectedfunctionprotectF() 
{  echoMETHOD.&#39; protected function&#39;. PHP_EOL; }}classQuestion{ publicfunctionpublicF() 
{  echoMETHOD.&#39; public function&#39;. PHP_EOL; } protectedfunctionprotectF() 
{  echoMETHOD.&#39; protected function&#39;. PHP_EOL; }}classPublishextendsQuestion{ useLog; publicfunctionpublicF() 
{  echoMETHOD.&#39; public function&#39;. PHP_EOL; } publicfunctiondoPublish() {  $this->publicF();  $this->protectF(); }}
$publish=newPublish();$publish->doPublish();    
上述代码的输出结果如下:
Publish::publicFpublicfunctionLog::protectFprotectedfunction
Beweisen Sie die Priorität von Attributen in der Trait-Anwendung durch den folgenden Code:


Mitglieder aus der aktuellen Klasse überschreiben die Trait-Methode

trait Override the geerbte Methode

Klassenmitgliedspriorität ist: aktuelle Klasse>Merkmal> Elternklasse

Genau wie die wörtliche Bedeutung ersetzt das Schlüsselwort „statt“ das letztere durch das erstere, da das Wort „key“ einen Alias ​​​​gibt die abgelöste Methode.

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!

Stellungnahme:
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