Pourquoi le trait de soulignement est-il converti en séparateur de répertoire dans la norme PSR-0 ?

StackOverflow https://stackoverflow.com//questions/11696219

  •  12-12-2019
  •  | 
  •  

Question

Le PSR-0 (https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) spécifie qu'un trait de soulignement dans le nom de classe doit être converti en séparateur de répertoire dans le nom de fichier correspondant.

Pour moi, cela ne semble pas être une bonne idée car cela crée beaucoup d'erreurs lorsque quelqu'un qui ne connaît pas le standard utilise innocemment un trait de soulignement dans le nom de la classe et que tout à coup, le chargeur automatique ne peut pas trouver la classe et toutes sortes d'erreurs étranges apparaissent (voir ce problème de stackoverflow par exemple : Erreur de mappage Symfony2.1 :classe_parents())

Donc je suppose qu'il doit y avoir une sorte de raison (compatibilité historique avec une bibliothèque ?) pour cette "fonctionnalité".Ma question est:Est-ce que quelqu'un sait pourquoi cela a été introduit dans la norme PSR-0 ?

Était-ce utile?

La solution

Les soulignements ont été utilisés dans les moments où PHP n'a pas encore pris en charge les espaces de noms.Un projet organisé "correct" suit la convention de noms de noms de la même manière que la structure de répertoire.

Il ne s'agit que d'une "règle" générale d'organiser des fichiers dans un projet.

Donc, si vous avez une structure de répertoire de:

root
  Name
    Package
      MyClass.php

Les gens faisaient:

class Name_Package_MyClass {}

Mais maintenant que nous avons des espaces de noms, il devient:

namespace Name\Package;

class MyClass { }

Il s'agit simplement de directives de style codant qui garantit que tout le monde fait la même chose.

Alors qu'est-ce que PSR-0 est la carte à la fois l'ancien et le nouveau style de noms de noms à un nom de fichier.

Autres conseils

PHP prend en charge les espaces de noms depuis la version 5.3. Auparavant, la convention la plus courante consistait à utiliser le trait de soulignement comme séparateur d'espace de noms (répertoire), par exemple : My_Project_ClassName a été cartographié comme /path/to/my/My/Project/ClassName.Je pense que la rétrocompatibilité est la raison principale.

Gardez à l'esprit que la norme PSR-0 a été écrite pour quelques projets spécifiques et pas nécessairement la meilleure option pour votre propre projet.Comme il est dit sur leur site: "Si d'autres personnes veulent adopter ce que nous faisons, ils sont les bienvenus pour le faire, mais ce n'est pas l'objectif."PSR-0 est très restrictif, je ne choisirais pas de l'utiliser simplement parce que les autres sont.Considérez ce que vous voulez réellement de votre projet et s'il sera bénéfique pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top