Maison >développement back-end >tutoriel php >Explication détaillée des étapes d'utilisation des traits de réutilisation du code

Explication détaillée des étapes d'utilisation des traits de réutilisation du code

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

Cette fois, je vais vous apporter une explication détaillée des étapes d'utilisation des Traits pour la réutilisation du code. Quelles sont les précautions pour l'utilisation des Traits pour la réutilisation du code. Voici des cas pratiques, jetons un coup d'œil.

À partir de la version 5.4.0 de PHP, PHP propose un nouveau concept de réutilisation de code, qui est Trait. Trait signifie littéralement « caractéristiques » et « caractéristiques ». On peut comprendre que l'utilisation du mot-clé Trait peut ajouter de nouvelles caractéristiques aux classes en PHP.

Tous ceux qui connaissent Orienté objet savent qu'il existe deux méthodes de réutilisation de code couramment utilisées dans le développement logiciel : l'héritage et le polymorphisme. En PHP, un seul héritage peut être obtenu. Les traits évitent cela. Ce qui suit est une explication comparative à travers un exemple simple.

1. Héritage VS Polymorphisme VS Trait

Il y a maintenant deux classes : Publish.php et Answer.php. Pour y ajouter la fonction LOG, enregistrez les actions à l'intérieur de la classe. Il existe plusieurs options :

  1. Héritage

  2. Polymorphisme

  3. Trait

1.1. La structure du code

héritée est la suivante :

// Log.php<?phpClass Log{ publicfunctionstartLog() {  // echo ... } publicfunctionendLog() {  // echo ... }}    
// Publish.php<?phpClass PublishextendsLog{}    
// Answer.php<?phpClass AnswerextendsLog{}

1.2 Code d'implémentation

polymorphe :

// 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. Le code d'implémentation de Trait

est le suivant :

// 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. Conclusion


L'héritage peut également résoudre le problème. problème. , mais son idée viole le principe orienté objet et semble très grossière ; la méthode polymorphe est également réalisable, mais elle ne respecte pas le principe DRY dans le développement logiciel et augmente les coûts de maintenance. La méthode Trait évite les défauts ci-dessus et permet de réutiliser le code de manière relativement élégante.

2. Portée du Trait

Après avoir compris les avantages du Trait, nous devons également comprendre les règles de sa mise en œuvre. C'est plus facile à prouver. Le code d'implémentation est le suivant :

<?phpclassPublish { useLog; publicfunctiondoPublish() 
{  $this->publicF();  $this->protectF();  $this->privateF(); }}
$publish=newPublish();$publish->doPublish();    
publicfunctionprotectedfunctionprivatefunction
Vous pouvez trouver que la portée de Trait est visible à l'intérieur de la référence

de la classe Trait. On peut comprendre que le mot-clé use copie le code d'implémentation du Trait dans la classe qui référence le Trait.

可以发现,Trait的作用域在引用该Trait类的内部是都可见的。可以理解为use关键字将Trait的实现代码Copy了一份到引用该Trait的类中。

3 Priorité des attributs dans Trait

En ce qui concerne la priorité, il doit y avoir un objet de référence pour la comparaison. L'objet de référence fait ici référence à la classe Trait et à sa classe parent.

Prouvez la priorité des attributs dans l'application Trait via le code suivant :
<?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


Les membres de la classe actuelle remplacent la méthode du trait

trait Remplacer le méthode héritée

la priorité du membre de la classe est : classe actuelle>Trait> classe parent


Tout comme le sens littéral, le mot-clé placeof remplace ce dernier par le premier, comme clé Le mot donne un alias à la méthode remplacée.

utilise le mot-clé use pour faire référence à Trait, et le mot-clé use est également utilisé pour faire référence à l'espace de noms

. La différence entre les deux est que lors de la référence à Trait, il est utilisé à l'intérieur de la classe.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Comment supprimer les valeurs nulles ou les éléments vides dans un tableau en PHP

implémente PHP une fonction de journalisation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn