是否需要包含命名空间文件?

时间:2014-05-30 13:56:34

标签: php namespaces

这就是我手边的事情:

//Person.php
namespace Entity;

class Person{


}

用户文件:

//User.php
use Entity\Person;

$person = new Person;

如果我不包含Person.php文件,则会失败。如果我包括它,一切正常。即使使用命名空间,我是否绝对需要包含该文件?如果我们需要包含/ require文件,那么如何有效地使用命名空间?另外,我们可以通过嵌套命名空间来维护文件夹结构吗?

3 个答案:

答案 0 :(得分:7)

您的问题的答案是“是和否”。

确实必须包含实现类Person的代码,否则该类未定义且无法使用。当代码时,定义应该来自哪里? php解释器不能猜测类的实现。顺便说一下,在所有编程语言中都是一样的。

然而,php中有一些名为Autoloading的东西。它允许自动包含某些文件。该机制基于类名到文件名的映射。所以最后它归结为php搜索文件夹结构,找到一个名称暗示它实现了它执行的代码中当前所需的类的文件。

但不要弄错:仍然意味着必须包含该文件。唯一的区别是:包含是自动完成的,因此无需指定明确的includerequire语句。

答案 1 :(得分:4)

是的,您需要包含每个文件。 关于命名空间的有效使用,可以找到一个非常好的例子here

答案 2 :(得分:1)

使用PSR-0自动加载,名称空间必须与类所在的文件夹相同,文件名必须与类名相同。例如,这为您提供了非常简单有效的自动加载功能。