


Explication détaillée de la façon d'utiliser Trait pour résoudre un problème d'héritage unique en PHP
Comment briser la malédiction de l'héritage unique en PHP ? L'article suivant vous présentera comment utiliser Trait pour résoudre le problème d'héritage unique en PHP. J'espère qu'il vous sera utile.
Nous savons tous que PHP est un langage à héritage unique, mais parfois nos deux classes qui n'ont rien à voir avec les affaires peuvent avoir des comportements similaires. Comment pouvons-nous réaliser avec élégance DRY (Don't Repeat Yourself) ?
La réponse est d'introduire Trait
Trait
Trait简介
Trait是PHP 5.4引入的新概念,看上去既像类又像接口。【推荐学习:《PHP视频教程》】
其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中。
Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。
Trait作用
表明类可以做什么;
提供模块化实现。
单继承结构
开篇我就提到了PHP是单继承语言
,我们通常的习惯是:
先编写一个通用的基类,实现基本的功能,进行通用逻辑的封装,然后扩展这个基类;
然后再创建更具体的子类,直接从父类继承实现。
这叫方式就是单继承层次结构,很多编程语言都使用这个模式。
大多数时候这种典型的继承模型能够良好运作,但是如果想让两个无关的PHP类具有类似的行为,应该怎么做呢?
示例源码
我查询了Laravel的源码,以自带的LoginController
为例,其中的登录认证就是通过Trait实现:
创建Trait
创建Trait很简单,跟创建类有点类似,只不过使用的关键字是trait
而不是class
,以上述的AuthenticatesUsers
为例:
我们通过trait
声明定义的是一个Trait,然后我们可以在这个Trait中像类一样定义要使用的属性和方法。
此外Trait支持嵌套和组合,即通过一个或多个Trait(多个用,分隔)组合成一个Trait,比如AuthenticatesUsers
就是如此:
注意:Trait中还支持定义抽象方法和静态方法,其中抽象方法必须在使用它的类中实现。
调用方法的优先级:
调用类>Trait>父类(如果有的话),方法可以覆盖,但属性不行。
注意:如果Trait中定义了一个属性,如果调用类中也定义这个属性则会报错。
使用Trait
Trait的使用方法也很简单,上面的截图示例中已经显示的很清楚明了:使用use
关键字。
引入位置
注意:命名空间和Trait使用的都是use
关键字引入,不同之处在于导入位置,命名空间在类的定义体外导入,而Trait在类的定义体内导入。
编译问题
如果Trait和引用Trait的类有相同的属性和方法,我们再外部调用时需要使用instansof
Introduction à Trait
Trait est un nouveau concept introduit dans PHP 5.4, qui ressemble à la fois à une classe et une interface. [Apprentissage recommandé : "Tutoriel vidéo PHP"]
En fait, il n'est ni l'un ni l'autre, les Traits peuvent être considérés comme des implémentations partielles de classes qui peuvent être mélangées dans une ou plusieurs classes PHP existantes. Trait est une technologie de réutilisation de code qui fournit un mécanisme flexible de réutilisation de code pour la restriction d'héritage unique de PHP.
🎜Fonction Trait🎜- 🎜Indique le class Que peut-on faire ; 🎜
- 🎜Fournir une implémentation modulaire. 🎜
Structure d'héritage unique
🎜J'ai mentionné au début quePHP est un langage d'héritage unique
. Notre habitude habituelle est : 🎜- 🎜Écrivez d'abord une classe de base générale pour implémenter les fonctions de base, encapsulez la logique générale, puis étendez cette classe de base ;🎜
- 🎜Créez ensuite une classe plus sous-classe spécifique qui hérite de l'implémentation directement de la classe parent. 🎜
Exemple de code source
🎜J'ai vérifié le code source de Laravel, en prenant comme exemple leLoginController
intégré. L'authentification de connexion est implémentée via Trait : 🎜🎜
Créer un trait h2>🎜 Créer un trait est très simple. C'est similaire à la création d'une classe, sauf que le mot-clé utilisé est trait
au lieu de class
ci-dessus. à titre d'exemple. :🎜🎜
🎜🎜 Ce que nous définissons via la déclaration trait
est un Trait, et nous pouvons ensuite définir les propriétés et les méthodes à utiliser dans ce Trait comme une classe. 🎜🎜De plus, les traits prennent en charge l'imbrication et la combinaison, c'est-à-dire qu'un ou plusieurs traits (plusieurs sont séparés par) sont combinés en un seul trait, tel que AuthenticatesUsers
: 🎜🎜
🎜🎜Remarque : Trait prend également en charge les définitions Méthodes abstraites et méthodes statiques, où une méthode abstraite doit être implémentée dans la classe qui l'utilise. 🎜🎜Priorité de la méthode d'appel : 🎜🎜Classe d'appel>Trait>Classe parent (le cas échéant), méthodes peuvent être remplacés, mais pas les attributs. 🎜🎜Remarque : Si un attribut est défini dans Trait, une erreur sera signalée si cet attribut est également défini dans la classe appelante. 🎜Utiliser Trait
🎜La méthode d'utilisation de Trait est également très simple L'exemple de capture d'écran ci-dessus l'a montré très clairement : utilisez useMots clés. 🎜<h2 id="strong-Emplacement-d-introduction-strong"><strong>Emplacement d'introduction</strong></h2>🎜Remarque : les espaces de noms et les traits sont tous deux introduits à l'aide du mot-clé <code>use
. La différence réside dans l'emplacement d'importation, Espaces de noms. sont importés en dehors de la définition de classe, tandis que les traits sont importés à l'intérieur de la définition de classe. 🎜🎜
🎜Problèmes de compilation
🎜Si un Trait a les mêmes propriétés et méthodes que la classe qui référence le Trait, nous devons utiliser le mot-clé instansof
pour indiquer que le La méthode est une classe lors d'un appel externe. C'est toujours un Trait. 🎜🎜Parce que l'interpréteur PHP copiera le Trait dans le corps de définition de la classe lors de la compilation, mais ne gérera pas les problèmes d'incompatibilité introduits par cette opération, nous devons donc résoudre les problèmes de compatibilité. 🎜🎜Pour plus de connaissances liées à la programmation, veuillez visiter : 🎜Enseignement de la programmation🎜 ! ! 🎜
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.
