所包含文件中的名称空间声明是否自动包含父文件的名称空间(PHP)


Do namespace declarations within included files automatically include the parent file's namespace (PHP)?

应该是一个简单的问题。我还没有安装5.3,所以我不能自己做实验。

在包含的文件中声明名称空间时,是否必须声明该名称空间的完整路径,还是假设父名称空间已经被包含?

例如,如果我有一个文件:

// file1.php
<?php
    namespace parent_space;
    include 'file2.php';
?>

和第二个文件:

// file2.php
<?php
    namespace child_space;
    // some code
?>

由于file2.php包含在file1.phpparent_space名称空间中,那么"某些代码"的名称空间是'parent_space'child_space',还是仅仅是'child_space' ?

No。当包含时,PHP对文件的位置没有任何意义,但是在解析代码时,就名称空间而言,它确实将每个文件视为一个完全独立的实体。

所以这段代码不起作用:

<?php
    namespace Food; //this is a top level namespace
    include 'file2.php';
//file2.php
<?php
    namespace Tacos; //this is still a top level namespace

您需要这样定义file2.php:

<?php
namespace Food'Tacos;

有关名称空间的更多信息,请参考PHP手册:http://www.php.net/manual/en/language.namespaces.basics.php

在PHP手册命名空间部分有一些类似的例子:

http://www.php.net/manual/en/language.namespaces.basics.php