


De __file__ à __dir__: un changement de meilleure pratique PHP moderne
Aug 01, 2025 am 07:39 AML'utilisation de __dir__ est meilleure que Dirname (__ File__), car __dir__ est plus simple, plus s?r et plus efficace. 1. __Dir__ est une constante magique introduite dans PHP 5.3, qui renvoie directement le chemin de répertoire absolu du fichier actuel sans appels de fonction; 2. Comparé à Dirname (__ Fichier__), il réduit l'analyse des cha?nes et évite les erreurs de couture de chemin potentielles; 3. Il est recommandé d'utiliser __dir__ pour construire des chemins relatifs, tels que __dir__. '/config.php'; 4. Vous pouvez utiliser dirname (__ dir__); 5. Bien que le chargement automatique du compositeur réduit le besoin d'introduction manuelle, __dir__ est toujours largement utilisé dans les fichiers de configuration, les définitions constantes et les fichiers de démarrage; 6. Les meilleures pratiques comprennent l'évitement de __file__ pour l'analyse des répertoires, la hiérarchisation automatique du chargement automatique et la considération d'outils de traitement de chemin plus robustes. Par conséquent, vous devez cesser d'utiliser Dirname (__ File__) et utiliser __dir__ à la place pour améliorer la lisibilité et la maintenance du code.
L'utilisation __FILE__
et __DIR__
en php peut sembler être un petit détail, mais le passage de __FILE__
à __DIR__
reflète une évolution plus large vers un code plus propre et plus maintenable - une meilleure pratique PHP moderne.
De retour dans les projets PHP plus anciens (en particulier le pré-PHP 5.3 ou avant que les normes PSR ne deviennent généralisées), vous verriez souvent du code comme ceci:
require_once dirname (__ file__). '/config.php'; Inclure __file__. '/../lib/helpers.php';
Ce modèle était standard pour créer des chemins de fichier par rapport au script actuel. Mais c'est maladroit, sujet aux erreurs et plus difficile à lire.
Pourquoi __DIR__
est meilleur que dirname(__FILE__)
En commen?ant par PHP 5.3, __DIR__
a été introduit comme une constante magique qui renvoie le répertoire du fichier actuel - aucun appel de fonction nécessaire.
Alors ceci:
dirname (__ fichier__)
devient simplement:
__Dir__
Cela signifie:
require_once dirname (__ file__). '/config.php';
peut maintenant être écrit comme:
require_once __dir__. '/config.php';
Il est plus court, plus clair et légèrement plus efficace (pas d'appel de fonction).
Plus propre, plus s?r et plus prévisible
L'utilisation de __DIR__
supprime l'ambigu?té. dirname(__FILE__)
s'appuie sur un appel de fonction pour analyser une cha?ne qui, bien que fiable dans la plupart des cas, ajoute une couche inutile. __DIR__
est résolu à l'heure de la compilation et vous donne toujours le chemin absolu vers le répertoire - pas de manipulation de cordes, pas de cas de bord.
Considérez également ce bogue subtil:
__DéPOSER__ . '/../config.php' // Oops! Slash manquant? Résultat: '/file.php../config.php'
Mais avec __DIR__
, vous partez d'un chemin de répertoire connu:
__Dir__. '/../config.php' // beaucoup plus clair et plus facile à raisonner
Encore mieux? Utilisez realpath()
ou dirname(__DIR__)
pour les répertoires parents d'une manière plus propre:
require_once dirname (__ dir__). ?/ vendeur/autoload.php?;
Ceci est particulièrement courant dans les fichiers d'amor?age ou les points d'entrée comme public/index.php
.
L'autofacteur le rendait moins nécessaire - mais toujours pertinent
Avec le PHP moderne à l'aide de composer et de mise à jour PSR-4, les instructions include
ou require
sont beaucoup moins courantes. Vous avez rarement besoin de charger manuellement les fichiers de classe.
Cependant, il existe encore des cas d'utilisation valides pour __DIR__
:
- Chargement des fichiers de configuration
- Configuration des constantes pour les chemins
- Enregistrement des plugins ou des modules dans un répertoire
- Batiment des chemins d'actifs dans les bootstraps CLI ou Framework
Exemple à partir d'un index.php
réel.php:
définir ('app_root', __dir__); require_once __dir__. '/../vendor/autoload.php'; $ config = require __dir__. '/config/app.php';
Ces modèles sont toujours à jour - juste plus propres avec __DIR__
.
Résumé des meilleures pratiques
- ? Utilisez
__DIR__
au lieu dedirname(__FILE__)
- c'est plus court et plus s?r - ?Prefer Autoloading sur
require
manuelles lorsque cela est possible - ? Utilisez
dirname(__DIR__)
pour référencer les répertoires des parents (commun en public / sous-dossiers) - ? évitez les chemins de main dans la cha?ne lorsque des outils comme
pathinfo()
ou les composantsfilesystem
existent - ? N'utilisez pas
__FILE__
pour la résolution du répertoire - c'est dépassé à cet effet
Fondamentalement, si vous tapez toujours dirname(__FILE__)
, il est temps de changer. __DIR__
existe depuis plus d'une décennie - ce n'est pas "nouveau", mais il fait partie de l'écriture de PHP moderne et lisible.
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

Undress AI Tool
Images de déshabillage gratuites

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.

Clothoff.io
Dissolvant de vêtements AI

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?!

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

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

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

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

DIRISESSEntialforBuildingReliablePhpautoloAdersBecauseitProvideSastable, AbsolutepathTothecurrent'sDirectory, assurant un objet de basse

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

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

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

MagicConstantsInphpareresolveDatCompileTimeBasedOnSourcecodeLocation, NotruntimeContext.2.InsideanymousFunctions, FonctionReturnsanemptyStringBecauseClosureslackaname.3.
