如果PHP库可以注册自己的自动加载器,那么为什么PSR-0要求它们位于统一目录中呢



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

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

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

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

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

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

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

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

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

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

最新更新