如果PHP库可以注册自己的自动加载程序,为什么PSR-0要求它们在统一的目录中?

8
我正在构建一个框架(这只是一个巨大的简化 - 请不要建议使用现有的框架,因为这并没有帮助),我想将其他库集成到其中。PSR-0建议每个子命名空间中的所有文件都包含在自己特定的目录中。为了使我的框架对用户更简单,我想将所有内容放在一个命名空间中,但是将文件组织成目录形式。如果PHP库可以使用spl_register_autoload()向其注册自己的自动加载程序,则必须遵守此目录结构吗?是否可行/允许仅放弃PSR-0,为我的类使用自己的自动加载程序,然后对于任何我可能使用的Symfony类,使用(例如)Symfony的自动加载程序?

1
做你想做的事。PSR-0是一个推荐标准,使用与否取决于你自己的决定。 - vascowhite
3
点赞了这个问题。在我看来,这个问题是有效的并值得回答。 - ficuscr
PSR是由PHP框架互操作性小组创建的:你的问题的答案就在这个小组的名字中。(为什么要使用n个自动加载器,当可以有一个来统治它们所有?) - salathe
5
另一个问题被过于热心的版主过早关闭了。我询问了规范背后的理由,如果有人知道它,这是一个明显的事实--而我不知道。我询问是否可以忽略规范,这是回答者可以充分解释的内容,他们也已经这样做了!此外,我没有看到任何争论。这个关闭似乎只是因为有些人不想让这个问题被提出。 - ringmaster
2个回答

6

没有人强迫你遵守标准。当然,你可以自己创建自己的自动加载器并使用它。

规范很可能是为了使库更易于理解而创建的,其想法是如果所有代码都使用相同的结构,则任何人都应该能够立即知道在哪里找到某个类。

遵循标准具有某些优点,例如:

  • 熟悉标准的人已经知道如何使用代码
  • 符合标准的工具可以与遵守标准的代码一起使用(例如,IDE插件)
  • 假定符合标准的代码可以已经用于所有遵守标准的代码,即使它不是专门为您自己的代码制作的(例如,第三方自动加载器应该能够加载您的代码,您自己的自动加载器也应该能够加载第三方代码)

一个缺点可能是你可能不喜欢这个标准。如果是这种情况,那么在决定是否遵循它时,你应该权衡一下优点。


1
此外,如果其他库遵循标准,您可以只使用一个自动加载程序来加载多个库中的类,而不是为您的类使用自动加载程序,然后必须为其类加载Symfony的自动加载程序,然后为库X的类加载其自动加载程序。
只要自动加载程序符合PSR规范,其他库的目录结构也符合规范,您就可以坚持使用一个自动加载程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接