Php 为什么在PSR-0标准中下划线转换为目录分隔符?

Php 为什么在PSR-0标准中下划线转换为目录分隔符?,php,psr-0,Php,Psr 0,PSR-0()标准指定类名中的下划线应转换为相应文件名中的目录分隔符 对我来说,这似乎不是一个好主意,因为当不了解标准的人无意中在类名中使用下划线时,自动加载程序突然找不到该类,并且出现了各种奇怪的错误(例如,请参阅此stackoverflow问题:) 所以我想这个“特性”一定有某种原因(与某些库的历史兼容性?)。我的问题是:有人知道为什么PSR-0标准中引入了下划线吗?在PHP还不支持名称空间的时候使用下划线。“正确”组织的项目遵循与目录结构相同的文件命名空间约定 在项目中组织文件只是一些通用

PSR-0()标准指定类名中的下划线应转换为相应文件名中的目录分隔符

对我来说,这似乎不是一个好主意,因为当不了解标准的人无意中在类名中使用下划线时,自动加载程序突然找不到该类,并且出现了各种奇怪的错误(例如,请参阅此stackoverflow问题:)


所以我想这个“特性”一定有某种原因(与某些库的历史兼容性?)。我的问题是:有人知道为什么PSR-0标准中引入了下划线吗?

在PHP还不支持名称空间的时候使用下划线。“正确”组织的项目遵循与目录结构相同的文件命名空间约定

在项目中组织文件只是一些通用的“规则”

因此,如果目录结构为:

root
  Name
    Package
      MyClass.php
人们过去常做:

class Name_Package_MyClass {}
但现在我们有了名称空间,它就变成了:

namespace Name\Package;

class MyClass { }
这只是编码风格指南,它确保每个人都做同样的事情


因此,PSR-0所做的是将新旧样式的名称空间映射到一个文件名。

PHP支持名称空间,从5.3版开始,早期最常见的约定是使用下划线作为名称空间(目录)分隔符,例如:
My_Project\u ClassName
被映射为
/path/to/My/My/Project/ClassName
。我认为向后兼容性是主要原因。

请记住,PSR-0标准是为一些特定项目编写的,不一定是您自己项目的最佳选择。正如他们在网站上所说:“如果其他人想采纳我们正在做的事情,我们欢迎他们这样做,但这不是目的。”PSR-0限制性很强,我不会仅仅因为其他人是这样就选择使用它。考虑你实际从项目中得到什么,以及它是否对你有益。

谢谢汤姆,但是PSR0正在成为很多项目的事实标准(例如SimfOny),所以有时你被迫使用。it@TomB那么你建议用什么来代替呢?感谢曾经满足项目需要的人。如果您使用的是composer,它可以使用的任何格式,如果不是,则可以使用适用于项目的任何方法。