题
PSR-0(https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) 标准指定类名中的下划线应转换为相应文件名中的目录分隔符。
对我来说,这似乎不是一个好主意,因为当不知道标准的人无意中在类名中使用下划线并且自动加载器突然找不到该类并且出现各种奇怪的错误时,它会产生很多错误(请参阅例如这个 stackoverflow 问题: Symfony2.1映射错误:类_父母())
所以我想这个“功能”一定有某种原因(与某些库的历史兼容性?)。我的问题是:有谁知道为什么在 PSR-0 标准中引入这个?
解决方案
下划线在PHP不支持名称空间时使用。“正确”组织项目遵循命名方式的惯例,与目录结构相同。
只是组织项目中的文件的一些普遍的“规则”。
所以如果您有一个目录结构:
root
Name
Package
MyClass.php
.
曾经做的人:
class Name_Package_MyClass {}
.
但现在我们有一个名称空间它变成了:
namespace Name\Package;
class MyClass { }
.
它只是编码风格指南,确保每个人都做同样的事情。
所以PSR-0所做的是将NameSpacing的旧样式映射到文件名。其他提示
PHP 从 5.3 版本开始支持命名空间,早期最常见的约定是使用下划线作为命名空间(目录)分隔符,例如: My_Project_ClassName
被映射为 /path/to/my/My/Project/ClassName
. 。我认为向后兼容性是主要原因。
请记住,PSR-0标准是为几个特定项目编写的,而不一定是您自己项目的最佳选择。正如他们在他们的网站上所说的那样:“如果其他人想要采用我们正在做的事情,欢迎他们这样做,但这不是目标。”PSR-0非常严格,我不会选择使用它,因为其他人是。考虑一下你的项目实际上,是否对你有益。
不隶属于 StackOverflow