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