PHP命名空间 - 为什么我必须使用{Parent}"如果声明Parent \ Child?

时间:2016-12-09 17:55:46

标签: php namespaces

在PHP中使用命名空间的新功能已经达到了一些我不太了解的东西。

档案:common.php

namespace Base;

function c_foo(){ return 0 };

file:worker.php

这不起作用:

namespace Base\Worker;

Class worker {
    public function do_work(){ return  c_foo() ) };  <--unknown function "c_foo"
}

这有效:

namespace Base\Worker;
use Base;

Class worker {
    public function do_work(){ return  Base\c_foo() ) };  
}

我发现需要在{namespace}\前面进行函数调用,这有点尴尬。我做错了什么,是否有更好的方法使父命名空间函数在子命名空间中可用?

2 个答案:

答案 0 :(得分:1)

它不起作用,因为当您调用c_foo()时,php将搜索在Base\Worker命名空间下定义的函数。 (Base\Worker\c_foo())。从php 5.6你可以导入函数。

use function Base\c_foo;

答案 1 :(得分:1)

因为您已在文件顶部声明了名称空间Base\Worker,所以如果您想要使用该名称空间之外的内容,则需要将其名称空间及其名称包含在内。

你应该可以这样做:

namespace Base\Worker;
use function Base\c_foo; // php >= 5.6

c_foo();