自动加载器正在将命名空间转换为文件夹路径


Autoloader converting namespace into folder path

在尝试使用App'Model'Test时,使用加载root/app/model/test.php的自动加载器好吗?通过这种方式,每个类都应该根据其名称空间进行相应的组织。

这是一个好方法吗?如果没有,为什么?你有什么建议?

我是否应该定义一个特定的数组namespace => path,以确保我们不会加载意外的文件?通过这种方式,我每次都必须设置类似$map['App'Model'Test'] = 'root/app/model/test';的内容,这基本上会删除自动加载器的所有乐趣。不是吗?

  1. 这是OOP中使用的一种相当"标准"的方法
  2. 通常,当自动加载器中注入了类映射($map)时,它们会更快。这是因为它们不必通过include路径来查找实例化了类的文件。给它们一个绝对的文件名,就可以将它们与include路径解耦。提供$map还允许您以另一种方式组织类(而不仅仅是基于文件系统的命名)。除此之外,还有一些类映射生成器,您可以在之前运行它们来实际实现这一点,而不必在每次重命名或移动某个类时手动(重新)执行。然而,在开发过程中,使用标准的自动加载逻辑(没有类映射)更方便,因为保持文件和其中声明的类的同步可能会变得非常乏味,与开发本身几乎没有关系

减少样板代码的数量并不是自动加载器的唯一目的:

  • 您只加载代码中实际需要的类声明;并非全部或部分声明;只有使用的
  • 它确保您的include_oncerequire_once关于类在自动加载中仅发生
  • 你的课程不专注于加载文件;他们专注于自己的功能