PSR-0(https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md)标准指定应将类名中的下划线转换为相应文件名中的目录分隔符。
对我而言,这似乎不是一个好主意,因为当不知道标准的人无辜地在类名中使用下划线并且突然自动加载器无法找到类和所有类型的奇怪错误时,它会产生许多错误出现(请参阅此stackoverflow问题,例如:Symfony2.1 mapping error: class_parents())
所以我想这个“功能”必定有某种原因(与某些库的历史兼容性?)。我的问题是:有谁知道为什么这是在PSR-0标准中引入的?
答案 0 :(得分:6)
在PHP尚未支持命名空间的时候使用了下划线。 “正确”的有组织项目遵循命名空间,与目录结构相同。
组织项目中的文件只是一些通用的“规则”。
因此,如果您的目录结构为:
root
Name
Package
MyClass.php
过去的人:
class Name_Package_MyClass {}
但是现在我们有了命名空间,它变成了:
namespace Name\Package;
class MyClass { }
这只是编码风格指南,确保每个人都做同样的事情。
PSR-0的作用是将旧版和新版的命名空间映射到文件名。
答案 1 :(得分:1)
PHP支持自5.3版本以来的命名空间,之前最常见的约定是使用下划线作为命名空间(目录)分隔符,例如:My_Project_ClassName
被映射为/path/to/my/My/Project/ClassName
。我认为向后兼容性是主要原因。
答案 2 :(得分:1)
请记住,PSR-0标准是针对一些特定项目编写的,不一定是您自己项目的最佳选择。正如它们在他们的网站上所说:“如果其他人想要采纳我们正在做的事情,我们欢迎他们这样做,但这不是目的。” PSR-0非常严格,我不会因为其他人而选择使用它。考虑一下您对项目的实际需求以及它是否对您有益。