这就是我手边的情况:
//Person.php
namespace Entity;
class Person{
}
用户文件:
//User.php
use Entity\Person;
$person = new Person;
在这里,如果我不包括,那就失败了 Person.php
文件。如果我包含它,一切正常。即使使用命名空间,我是否绝对需要包含该文件?如果我们需要包含/ require文件,那么如何有效地使用命名空间?另外,我们可以通过嵌套命名空间来维护文件夹结构吗?
你的问题的答案是“是的,不是”。
确实是实现类的代码 Person
必须包含,否则该类未定义,不能使用。当代码是什么时,定义应该来自何处 不 包括在内呢? PHP解释器不能 猜测 类的实现。顺便说一下,在所有编程语言中都是一样的。
然而有一些东西叫做 自动加载 在PHP中。它允许自动包含某些文件。该机制基于类名到文件名的映射。所以最后它归结为php搜索文件夹结构,找到一个名称暗示它实现了它执行的代码中当前所需的类的文件。
但是不要错了:那 仍然 表示必须包含该文件。唯一的区别是:包含是自动完成的,所以没有指定显式 include
要么 require
声明。
是的,您需要包含每个文件。
可以找到一个很好的例子 这里 有效使用命名空间。
使用PSR-0自动加载,命名空间必须与类所在的文件夹相同,文件名必须与类名相同。例如,这为您提供了非常简单有效的自动加载功能。