亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Table des matières
Ce que __TRAIT__ est réellement
Comment __TRAIT__ se comporte à l'intérieur d'une classe (lorsque le trait est utilisé)
Exemple: plusieurs classes utilisant le même trait
Pourquoi cela compte: débogage et journalisation
Principaux à retenir
Une bizarrerie: aliasing et as
Maison développement back-end tutoriel php La magie contextuelle de __trait__: comment elle se comporte à l'intérieur des classes

La magie contextuelle de __trait__: comment elle se comporte à l'intérieur des classes

Jul 29, 2025 am 04:31 AM
PHP Magic Constants

Le trait est une constante magique en PHP qui renvoie toujours le nom du trait dans lequel il est défini, quelle que soit la classe qui l'utilise. 1. Il est résolu au temps de compilation dans la portée du trait et ne change pas en fonction de la classe d'appel. 2. Contrairement à la classe__, qui reflète le contexte de classe actuel, __trait reste fixé au nom du trait. 3. Il est utile pour le débogage, l'exploitation forestière et les rapports d'erreurs en fournissant une identification cohérente des traits. 4. Il ne peut pas être utilisé à l'extérieur d'un trait, entra?nant une erreur mortelle si elle est tentée. 5. Méthode L'aliasage avec ?As? n'affecte pas la valeur du trait __ car le contexte interne du trait reste inchangé. Par conséquent, __trait s'auto-identifie de manière fiable le trait, garantissant un comportement prévisible dans différentes classes.

La magie contextuelle de __trait__: comment elle se comporte à l'intérieur des classes

__TRAIT__ n'est pas une constante PHP intégrée - vous pensez probablement à __TRAIT__ , qui est une constante magique en php, similaire à __CLASS__ , __METHOD__ ou __FUNCTION__ . Il est utilisé spécifiquement dans le contexte des traits , et en comprenant comment il se comporte dans les classes (et dans le trait lui-même) révèle un comportement contextuel subtil mais puissant.

Décomposons la ?magie contextuelle? de __TRAIT__ et comment elle agit lorsqu'un trait est utilisé à l'intérieur d'une classe.


Ce que __TRAIT__ est réellement

__TRAIT__ est une constante magique qui renvoie le nom du trait dans lequel il est utilisé , comme cha?ne. Ce n'est significatif que dans le corps d'un trait. Tout comme __CLASS__ vous donne le nom de classe actuel, __TRAIT__ vous donne le nom entièrement qualifié du trait actuel - mais uniquement à partir du trait.

 trait mytrait {
    fonction publique gettraitName () {
        retour __trait__;
    }
}

classe myClass {
    Utilisez MyTrait;
}

$ obj = new myClass ();
echo $ obj-> gettraitName (); // Sorties: Mytrait

Jusqu'à présent, si simple. Mais c'est là que commence la magie - et la confusion -.


Comment __TRAIT__ se comporte à l'intérieur d'une classe (lorsque le trait est utilisé)

Même si les méthodes du trait sont injectées dans une classe, __TRAIT__ ne change pas en fonction de la classe en utilisant le trait. Il est résolu à l'heure de compilation , pas à l'exécution, et fait toujours référence au nom du trait - quelle que soit la classe l'utilise.

Exemple: plusieurs classes utilisant le même trait

 Logueur de trait {
    Journal des fonctions publiques ($ message) {
        écho '['. __TRAIT__ . ']'. $ message. Php_eol;
    }
}

classe utilisateur {
    Utiliser Logger;
}

Classe Product {
    Utiliser Logger;
}

$ user = new User ();
$ product = nouveau produit ();

$ user-> log ("utilisateur créé"); // [Logger] Utilisateur créé
$ product-> log ("produit ajouté"); // produit [logger] ajouté

Même si Logger est utilisé dans différentes classes, __TRAIT__ évalue toujours en 'Logger' dans les deux cas. Il ne devient pas 'User' ou 'Product' .

Ceci est différent de __CLASS__ , qui changerait en fonction du contexte d'appel:

 trait testContext {
    fonction publique showClass () {
        Echo "Classe:". __CLASSER__ . "\ n";
    }

    fonction publique showtrait () {
        écho "Trait:". __TRAIT__ . "\ n";
    }
}

Exemple de classe {
    Utiliser TestContext;
}

$ e = nouvel exemple ();
$ e-> showclass (); // Classe: Exemple
$ e-> showtrait (); // trait: testContext

Ainsi, __CLASS__ reflète la classe où la méthode est appelée , mais __TRAIT__ reflète le trait où il est défini - peu importe où il est utilisé.


Pourquoi cela compte: débogage et journalisation

Le comportement cohérent de __TRAIT__ le rend super utile dans:

  • Journalisation : vous pouvez identifier d'où vient une ligne de journal, même si elle est partagée entre de nombreuses classes.
  • Rapports d'erreur : lancez des exceptions avec le contexte sur lequel le trait a généré l'erreur.
  • Comportement dynamique : exécutez conditionnellement le code basé sur le nom du trait (rare, mais possible).

Par exemple:

 Trait SecureAccess {
    Fonction publique CheckAccess () {
        if (! $ this-> currentUserHasaccess ()) {
            Jetez une nouvelle exception ("Accès refusé dans le trait:". __trait__);
        }
    }
}

Cela donne des messages d'erreur plus clairs que le codage en dur du nom du trait.


Principaux à retenir

  • ? __TRAIT__ est résolu à l'intérieur du trait , au moment de la compilation .
  • ? Il renvoie toujours le nom du trait , jamais la classe l'utilisant.
  • ? Il ne peut pas être utilisé en dehors d'un trait - il n'est pas défini (entra?ne une erreur fatale).
  • ? Il ne change pas en fonction du contexte de la classe - contrairement à __CLASS__ .

Ainsi, alors que __CLASS__ est contextuel à l'appelant, __TRAIT__ est auto-référentiel et fixe .


Une bizarrerie: aliasing et as

Même si vous renommez une méthode via use MyTrait::method as myMethod; , __TRAIT__ fonctionne toujours de la même manière - parce que le corps de la méthode n'a pas changé.

 trait apihelper {
    fonction publique getClient () {
        Echo "de trait:". __TRAIT__;
    }
}

classe LegacySystem {
    Utilisez ApiHelper {GetClient comme GetoldClient; }
}

$ obj = new LegacySystem ();
$ obj-> getoldClient (); // Très imprime: de Trait: Apihelper

Le renommer la méthode n'affecte pas le contexte interne du code de trait.


En bref, __TRAIT__ est un outil petit mais puissant qui maintient son identité, peu importe où il est utilisé. Son comportement est cohérent, prévisible et profondément lié à la définition du trait - pas les classes qui l'adoptent.

Fondamentalement, c'est comme un trait disant: "Peu importe où tu m'utilise, je saurai toujours qui je suis."

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

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)

Mastering Relative Chemins: La puissance de __dir__ et __file__ Mastering Relative Chemins: La puissance de __dir__ et __file__ Jul 30, 2025 am 05:35 AM

Dir et les fichiers sont des constantes magiques dans PHP, qui peuvent résoudre efficacement les erreurs d'inclusion de fichiers causées par des chemins relatifs dans des projets complexes. 1.File renvoie le chemin complet du fichier actuel et __dir__ renvoie son répertoire; 2. Utilisez DIR pour vous assurer que l'inclusion ou l'exigence est toujours exécuté par rapport au fichier actuel, en évitant les erreurs de chemin causées par différents scripts d'appel; 3. Il peut être utilisé pour inclure de manière fiable des fichiers, tels que require_oncedir. '/ .. / config.php'; 4. Définissez les constantes Base_DIR dans le fichier d'entrée pour unifier la gestion du chemin du projet; 5. Chargez des fichiers de configuration en toute sécurité, tels que $ config = requiredir. '/ Config / dat

Batiment Autoloaders Bulletproof: une plongée profonde dans la constante __dir__ Batiment Autoloaders Bulletproof: une plongée profonde dans la constante __dir__ Jul 31, 2025 pm 12:47 PM

DIRISESSEntialforBuildingReliablePhpautoloAdersBecauseitProvideSastable, AbsolutepathTothecurrent'sDirectory, assurant un objet de basse

Comment les constantes magiques suralimentent vos architectures basées sur les traits Comment les constantes magiques suralimentent vos architectures basées sur les traits Jul 29, 2025 am 04:07 AM

Dans l'architecture basée sur les traits, les constantes magiques ne sont pas des anti-motifs, mais peuvent être utilisées comme marqueurs de temps de compilation ou invites d'optimisation pour la conception intentionnelle. 1. Les constantes magiques peuvent être utilisées comme commutateurs de version, telles que la distinction du comportement de sérialisation par le biais de Constursion: U8, afin que le code en aval puisse être compilé en fonction des conditions de version; 2. Il peut être optimisé et distribué dynamiquement en tant que balises, telles que l'allocation de constantes de balises uniques aux implémentations de trait, atteignant la correspondance rapide du chemin et peut être éliminée par le compilateur en ligne; 3. Il peut remplacer RTTI pour fournir une distinction de type léger, tel que la génération d'empreintes digitales de type via le hachage de compilation pour éviter les informations sur les informations de type d'exécution; 4. Il est nécessaire d'éviter la ?magie? réelle lors de l'utiliser, et doit être unifiée, entièrement documentée et la priorité doit être donnée à l'utilisation de drapeaux enum ou bits pour améliorer la lisibilité, comme l'utilisation de l'énumération

Déboggage précis avec __line__, __file__ et __function__ Déboggage précis avec __line__, __file__ et __function__ Jul 29, 2025 am 03:21 AM

ThesoSteffiveDebuggingTrickinc / c isusingthebuilt-inmacros__file __, __ ligne __ et__function__togetpreciseerractex

La magie contextuelle de __trait__: comment elle se comporte à l'intérieur des classes La magie contextuelle de __trait__: comment elle se comporte à l'intérieur des classes Jul 29, 2025 am 04:31 AM

TraitisamagicConstantinPhpThatalwayways est en train de voir le nom de thèse

Amélioration de votre stratégie de journalisation des erreurs avec des constantes magiques contextuelles Amélioration de votre stratégie de journalisation des erreurs avec des constantes magiques contextuelles Aug 01, 2025 am 07:47 AM

ContextualMagicConstantsaRenamed, significatif Identificateurs pour leprovideclearcontextInERRORLOGS, Suchasuser_Login_Attemptorpayment_Processing.2.TheyProbeDebuggingByreplacingVagueErrorMessages avec une recherche, searchableConTex

Métaprogrammation dynamique avec __class__, __Method__ et __Namespace__ Métaprogrammation dynamique avec __class__, __Method__ et __Namespace__ Aug 01, 2025 am 07:48 AM

Classe __, __ Méthode __ et__NamespaceAlephpmagicConstants de la propriété de la commande

Résolution de l'ambigu?té du chemin dans des applications complexes avec __dir__ Résolution de l'ambigu?té du chemin dans des applications complexes avec __dir__ Jul 29, 2025 am 03:51 AM

L'utilisation de __dir__ peut résoudre le problème de chemin dans les applications PHP car il fournit le chemin absolu vers le répertoire où se trouve le fichier actuel, en évitant d'incohérence entre les chemins relatifs dans différents contextes d'exécution. 1.DIR__ Renvoie toujours le chemin absolu du répertoire du fichier actuel pour assurer le chemin précis lorsque le fichier est inclus; 2. Utilisez __dir. '/ .. / config.php' et d'autres méthodes pour réaliser des références de fichiers fiables et ne sont pas affectées par la méthode d'appel; 3. Définissez des constantes telles que App_root, config_path dans le fichier d'entrée pour améliorer la maintenabilité de la gestion des chemins; 4. Utiliser __dir__ pour le chargement automatique et l'enregistrement des modules pour assurer les bons chemins de classe et de service; 5. évitez la dépendance sur $ _Server ['Document

See all articles