Maison > Article > développement back-end > Exemple de partage de code de la fonction Traits introduite dans le framework thinkPHP5.0
Cet article présente principalement l'introduction de la fonction Traits dans le framework thinkPHP5.0. Il analyse les concepts et fonctions de Traits et l'utilisation de la fonction Traits dans thinkPHP5.0 sous forme d'exemples. . Les amis dans le besoin peuvent se référer à ce qui suit
L'exemple de cet article décrit l'introduction de la fonction Traits dans le framework thinkPHP5.0. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
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 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 à leur priorité. Les membres hérités de la classe de base sont remplacés par les membres insérés par les traits. 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.
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!