Table des matières
Trait简介
单继承结构
示例源码
创建Trait
使用Trait
引入位置
编译问题
Introduction à Trait
Structure d'héritage unique
Exemple de code source
🎜🎜 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 : 🎜🎜Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP🎜🎜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" >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. :🎜🎜 Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP🎜🎜 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 : 🎜🎜Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP🎜🎜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

Emplacement d'introduction
Problèmes de compilation
Maison développement back-end tutoriel php Explication détaillée de la façon d'utiliser Trait pour résoudre un problème d'héritage unique en PHP

Explication détaillée de la façon d'utiliser Trait pour résoudre un problème d'héritage unique en PHP

Mar 01, 2022 am 10:56 AM
php trait

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.

Explication détaillée de la façon d'utiliser Trait pour résoudre un problème d'héritage unique en PHP

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 TraitTrait

Trait简介

Trait是PHP 5.4引入的新概念,看上去既像类又像接口。【推荐学习:《PHP视频教程》】

其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中。

Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

Trait作用

  • 表明类可以做什么;

  • 提供模块化实现。

单继承结构

开篇我就提到了PHP是单继承语言,我们通常的习惯是:

  • 先编写一个通用的基类,实现基本的功能,进行通用逻辑的封装,然后扩展这个基类;

  • 然后再创建更具体的子类,直接从父类继承实现。

这叫方式就是单继承层次结构,很多编程语言都使用这个模式。

大多数时候这种典型的继承模型能够良好运作,但是如果想让两个无关的PHP类具有类似的行为,应该怎么做呢?

示例源码

我查询了Laravel的源码,以自带的LoginController为例,其中的登录认证就是通过Trait实现:

Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP

创建Trait

创建Trait很简单,跟创建类有点类似,只不过使用的关键字是trait而不是class,以上述的AuthenticatesUsers为例:

Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP

我们通过trait声明定义的是一个Trait,然后我们可以在这个Trait中像类一样定义要使用的属性和方法。

此外Trait支持嵌套和组合,即通过一个或多个Trait(多个用,分隔)组合成一个Trait,比如AuthenticatesUsers就是如此:

Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP

注意:Trait中还支持定义抽象方法和静态方法,其中抽象方法必须在使用它的类中实现。

调用方法的优先级:

调用类>Trait>父类(如果有的话),方法可以覆盖,但属性不行。

注意:如果Trait中定义了一个属性,如果调用类中也定义这个属性则会报错。

使用Trait

Trait的使用方法也很简单,上面的截图示例中已经显示的很清楚明了:使用use关键字。

引入位置

注意:命名空间和Trait使用的都是use关键字引入,不同之处在于导入位置,命名空间在类的定义体外导入,而Trait在类的定义体内导入

Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP

编译问题

如果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 que PHP 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. 🎜
🎜Cette méthode est appelée hiérarchie d'héritage unique, et de nombreux langages de programmation utilisent ce modèle. 🎜🎜Ce modèle d'héritage typique fonctionne bien la plupart du temps, mais que se passe-t-il si vous souhaitez que deux classes PHP non liées se comportent de la même manière ? 🎜

Exemple de code source

🎜J'ai vérifié le code source de Laravel, en prenant comme exemple le LoginController intégré. L'authentification de connexion est implémentée via Trait : 🎜🎜Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP🎜

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. :🎜🎜 Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP🎜🎜 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 : 🎜🎜Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP🎜🎜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. 🎜🎜Explication détaillée de la façon dutiliser Trait pour résoudre un problème dhéritage unique en PHP🎜

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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

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.

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

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.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

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

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

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.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

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.

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

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

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

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

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

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

See all articles