Autoloader将名称空间转换为文件夹路径

时间:2012-03-29 16:56:53

标签: php autoload

在尝试使用root/app/model/test.php时,使用加载App\Model\Test的自动加载器是否合适?这样,每个类都应该根据其命名空间进行组织。

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

我应该定义一个特定的数组namespace => path,以确保我们没有加载意外的文件吗?这样我每次都需要设置像$map['App\Model\Test'] = 'root/app/model/test';这样的东西,这基本上会删除自动加载器的所有乐趣。不是吗?

1 个答案:

答案 0 :(得分:1)

  1. 这是OOP中使用的一种相当“标准”的方法
  2. 通常自动加载器在注入类图($map)时速度更快。这是因为它们不必运行包含路径来查找具有实例化类的文件。给它们一个绝对的文件名,然后你将它们从包含路径中分离出来。提供$map还允许您以另一种方式组织您的类(而不仅仅是基于文件系统的命名)。除此之外,还有一些类映射生成器,您可以在之前运行以实际实现此目的,而不必在每次重命名或移动某些类时手动执行此操作。但是,在开发过程中,使用标准自动加载逻辑(没有类映射)会更方便,因为保持同步文件和在其中声明的类可能会非常繁琐,并且与开发本身几乎没有关系。
  3. 减少样板代码的数量并不是自动装载器的唯一目的:

    • 只加载代码中实际需要的那些类声明;不是全部或一些声明;只有那些使用
    • 确保您的include_oncerequire_once在自动加载中
    • 您的课程不专注于加载文件;他们专注于他们的功能