Autoloader将名称空间转换为文件夹路径
问题描述:
使用自动加载器在尝试使用App\Model\Test
时加载root/app/model/test.php
是否好?通过这种方式,每个班级都应该按照其名称空间进行组织。Autoloader将名称空间转换为文件夹路径
这是一个好方法吗?如果不是,为什么?你会建议什么?
我应该定义一个特定的数组namespace => path
,以确保我们不会加载意外的文件吗?这样我就必须设置每次像$map['App\Model\Test'] = 'root/app/model/test';
这样的事情,这基本上会删除自动加载器的所有乐趣。不是吗?
答
- 它是OOP 使用
- 通常自动加载速度更快,当他们有一类映射(
$map
)注入到他们,而“标准”的做法。这是因为它们不需要通过包含路径来查找带有实例化类的文件。为它们提供一个绝对的文件名,并且将它们从包含路径中分离出来。提供$map
还允许您以另一种方式组织您的课程(而不仅仅是基于文件系统的命名)。除此之外,还有一些类图生成器可以在你实际实现之前运行,而不必在每次重命名或移动某个类时手动重做。然而,在开发过程中,使用标准的自动加载逻辑(没有classmaps)会更方便,因为保持同步文件和其中声明的类可能非常繁琐,而且与开发本身无关。
减少样板代码的数量不是自动加载器的唯一目的:您加载只有实际需要在你的代码的类声明
- ;不是全部或部分声明;只有那些使用
- 它确保您的
include_once
和require_once
在对于类发生只在自动加载 - 你的类不注重加载文件;他们专注于他们的功能