PHP命名空间和包含文件

6

I have the following PHP code:

<?php
namespace my_ns;

class dummy
{

function do_print(){echo "printing...";}    
}

$obj_dummy=new dummy();
$obj_dummy->do_print();
?>

这个工作非常顺利,

然而,如果我将类放在一个单独的包含文件中(例如class.dummy.php),使页面上的代码看起来像下面这样:

<?php
namespace my_ns;
include ("class.dummy.php");
$obj_dummy=new dummy();
$obj_dummy->do_print();
?>

我收到了错误信息:
``` Class 'my_ns\dummy' not found in ... ```
如何默认情况下确保(所有)包含文件自动添加到给定命名空间?

1
class.dummy.php 文件中是否有 namespace my_ns; 这一行代码? - gen_Eric
另一个检查是看$obj_dummy=new \dummy();是否按预期工作。如果是,那么你的类就在全局命名空间中。 - naththedeveloper
这段代码应该可以直接运行。 - deceze
@deceze,恐怕您需要在所有包含的文件中重复namespace行... - Déjà vu
1个回答

5
一个包含命名空间的文件必须在任何其他代码之前在文件顶部声明命名空间,但有一个例外:declare关键字。
将此代码添加到您的包含文件中。 来源
namespace my_ns;

之后,你的代码就可以正常工作了。

参考资料


3
如果一个文件需要包含在多个命名空间中,是否有解决方法?我怀疑没有,而且我也怀疑我应该停止使用那么多的包含文件! - BeNice
@BeNice - 包括一次,并在其他要使用它的文件中加入use my_ns\dummy; - Douglas.Sesar

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