在 PHP 中,被包含的文件中的命名空间声明会自动包含父文件的命名空间吗?

4

这应该是一个简单的问题。我还没有安装5.3,所以我无法自己进行实验。

当在一个包含的文件中声明命名空间时,我必须声明命名空间的完整路径吗?还是父命名空间已经被假定为已经被包含了?

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

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

还有一个文件:

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

由于file2.php是从file1.php中的parent_space命名空间内包含的,因此“一些代码”的命名空间是\parent_space\child_space\还是仅为\child_space\


这是文档中所说的:http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.conflict - powtac
2个回答

4

不,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文件:

您需要以以下方式定义您的file2.php:

<?php

namespace Food\Tacos;

请参考PHP手册以获取有关命名空间的更多信息:http://www.php.net/manual/zh/language.namespaces.basics.php


0

我假设你所说的"no",是指我所提出的第二个命名空间的可能性被使用了? - dqhendricks
1
是的。"不"是对你标题中问题的回答。 - koen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接