Skip to content

Latest commit

 

History

History
39 lines (29 loc) · 4.51 KB

PSR-4.md

File metadata and controls

39 lines (29 loc) · 4.51 KB

PSR-0 - PSR-1 - PSR-3 - PSR-4 - PSR-6 - PSR-7 - PSR-11 - PSR-12 - PSR-13 - PSR-14 - PSR-15 - PSR-16 - PSR-17 - PSR-17 - PSR-18 Traduction française non-officielle de PSR-4: Autoloader.

PSR-4 : chargement automatique

Les mots-clés "DOIT", "NE DOIT PAS", "REQUIÈRE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDÉ", "PEUT" et "OPTIONNELLEMENT" [ainsi que leurs formes plurielles et négatives] dans ce document sont à interpréter au sens de la RFC 2119.

1. En résumé

Cette section du standard PSR décrit une spécification concernant le chargement automatique (autoloading) de classes à partir de chemins de fichiers. Cette spécification est totalement interopérable, et peut donc être utilisée en complément de toute autre spécification de chargement automatique, y compris la PSR-0 [ndt: dépréciée depuis]. La PSR-4 décrit également où placer les fichiers qui seront chargés automatiquement conformément à la spécification.

2. Spécification

  1. Le terme « classe » désigne toute classe, interface, trait ou structure similaire.
  2. Le nom complet (« pleinement qualifié », fully qualified) d’une classe a la forme \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>, de sorte que :
    1. le nom complet de la classe DOIT appartenir à un espace de nommage de niveau racine, aussi appelé vendor namespace ;
    2. le nom complet de la classe PEUT appartenir à un ou plusieurs sous-espaces de nommage ;
    3. le nom complet de la classe DOIT se terminer par le nom de la classe elle-même ;
    4. le caractère underscore (_) n’a aucun sens particulier lorsqu’utilisé au sein du nom complet de la classe ;
    5. les caractères alphabétiques PEUVENT être librement combinés dans leur version majuscule et minuscule au sein du nom complet de la classe ;
    6. tout nom de classe DOIT ensuite être référencé en respectant la casse de la déclaration.
  3. Lorsqu’un fichier correspondant à une nom complet de classe est chargé :
    1. il doit exister, dans le système de fichier, au moins un « dossier de base » dont le nom correspond exactement à une suite contiguë d’espaces de nommage (un ou plusieurs), autrement dit un espace de nommage « préfixe » car situé au début du nom complet de la classe, et ce en faisant abstraction du séparateur tout à gauche du préfixe ;
    2. la série contiguë de sous-espaces de nommage après le préfixe correspond à un sous-dossier d’un dossier de base, à l’intérieur duquel chaque séparateur présent dans le nom complet correspond à un nouveau niveau hiérarchique de sous-dossier. Le nommage des sous-dossiers DOIT respecter la casse des sous-espaces de nommage ;
    3. le nom final de la classe elle-même correspond à un fichier d’extension .php. Le nom du fichier DOIT respecter la casse du nom de la classe.
  4. Les implémentations de ce mécanisme de chargement automatique NE DOIVENT PAS lancer d’exception, NE DOIVENT PAS déclencher d’erreur de quelque niveau que ce soit, et NE DEVRAIENT PAS retourner de valeur.

3. Exemples

Le tableau ci-dessous présente différents cas de figure, avec la mise en relation entre un chemin de fichier et le nom complet de classe, l’espace de nommage « préfixe » et le dossier de base.

Nom complet de classe Espace de nom. préfixe Dossier de base Chemin résultant
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

Pour des exemples d’implémentation de cette spécification de chargement automatique, veuillez consulter ces fichiers. Les exemples d’implémentation NE DOIVENT PAS être considérées comme faisant partie de la spécification et PEUVENT être modifiées à tout moment.