Maison  >  Article  >  développement back-end  >  Explication détaillée de l'exemple de code de traits introduit dans thinkPHP5

Explication détaillée de l'exemple de code de traits introduit dans thinkPHP5

伊谢尔伦
伊谢尔伦original
2017-07-03 11:10:161954parcourir

ThinkPHP 5.0 a commencé à utiliser la fonction trait (PHP5.4+) comme mécanisme d'extension pour implémenter facilement plusieurs problèmes d'héritage dans une bibliothèque de classes.

Traits est un mécanisme de réutilisation de code préparé pour les langages à héritage unique comme PHP. Les traits sont conçus pour réduire les contraintes des langages à héritage unique et permettre aux développeurs de réutiliser librement des ensembles de méthodes dans des classes indépendantes au sein de différentes hiérarchies. La sémantique des traits et la composition des classes définissent un moyen de réduire la complexité et d'éviter les problèmes typiques associés à l'héritage multiple et aux mixins traditionnels.

Cependant, comme la version PHP5.4 ne prend pas en charge le chargement automatique des traits, donc s'il s'agit de la version PHP5.4, vous devez importer manuellement la bibliothèque de classes de traits et le système fournit un La fonction d'assistance load_trait est utilisée pour charger automatiquement la bibliothèque de classes de traits. Par exemple, la bibliothèque de classes de traits peut être correctement introduite comme ceci.

namespace app\index\controller;
load_trait('controller/Jump'); // 引入traits\controller\Jump
class index
{
   use \traits\controller\Jump;
   public function index()
   {
     $this->assign('name','value');
     $this->show('index');
   }
}

Si votre version de PHP est supérieure à 5.5, vous pouvez omettre la fonction load_trait et introduire trait.

namespace app\index\controller;
class index
{
   use \traits\controller\Jump;
   public function index()
   {
   }
}

peut prendre en charge l'introduction de plusieurs bibliothèques de classes de traits en même temps, par exemple :

namespace app\index\controller;
load_trait('controller/Other');
load_trait('controller/Jump');
class index
{
   use \traits\controller\Other;
   use \traits\controller\Jump;
   public function index()
   {
   }
}

ou utiliser

namespace app\index\controller;
load_trait('controller/Other');
load_trait('controller/Jump');
class index
{
   use \traits\controller\Other,\traits\controller\Jump;
   public function index()
   {
   }
}

Le système fournit certains Bibliothèque de classes de traits encapsulées, principalement utilisée pour les extensions de Controller et Model Class. L'espace de noms racine des bibliothèques de traits intégrées à ces systèmes utilise des traits au lieu de traits pour éviter les conflits avec les mots-clés du système.

Les bibliothèques de classes introduites via les traits doivent faire attention à la priorité Les membres hérités de la classe de base sont remplacés par les membres insérés par le trait. L'ordre de priorité est que les membres de la classe actuelle remplacent les méthodes du trait et que le trait remplace les méthodes héritées.

La classe de trait ne prend pas en charge la définition de constantes de classe. Les propriétés définies dans le trait ne peuvent pas être redéfinies dans la classe actuelle ou dans les classes héritées.

Résolution des conflits

Nous pouvons introduire plusieurs bibliothèques de classes de traits dans une bibliothèque de classes si les deux traits définissent une méthode du même nom, s'il n'y a pas de résolution explicite du. un conflit produira une erreur fatale.

Afin de résoudre le conflit de nom de plusieurs traits dans la même classe, vous devez utiliser l'opérateur placeof pour spécifier explicitement laquelle des méthodes en conflit utiliser.

La méthode ci-dessus permet uniquement d'exclure d'autres méthodes. L'opérateur as peut introduire l'une des méthodes en conflit sous un autre nom.

Pour plus d'informations sur les traits, veuillez vous référer au manuel officiel PHP.

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