8

我正在构建一个框架(这是一个巨大的简化——请不要推荐使用现有的框架,这没有帮助),我希望能够将其他库集成到其中。

PSR-0 建议建议每个子命名空间中的所有文件都包含在它们自己的特定目录中。为了让我的框架的用户不那么复杂,我想把所有东西都放在一个命名空间中,但将文件组织到目录中。

如果 PHP 库可以注册自己的自动加载器spl_register_autoload(),那么为什么必须遵守这个目录结构呢?简单地避开 PSR-0,为我的类使用我自己的自动加载器,然后对我可能使用的任何 Symfony 类使用(例如)Symfony 的自动加载器是否可行/允许?

4

2 回答 2

6

没有人强迫你遵守标准。当然,您可以制作自己的自动装载机并使用它。

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

以下标准具有一定的优势,例如:

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

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

于 2012-12-03T21:53:11.727 回答
1

此外,如果其他库遵循该标准,您可以只使用单个自动加载器从多个库中加载类,而不是为您的类使用您的自动加载器,然后必须为它的类加载 Symfony 的自动加载器,然后为它的类加载库 X 的自动加载器。它的类。

只要自动加载器符合 PSR 并且其他库的目录结构也符合,您就可以坚持使用一个自动加载器。

于 2012-12-03T21:56:06.840 回答