38

尝试在我自己的函数中使用名称空间时出现解析错误

require('/var/load.php');

function go(){

  use test\Class;

    $go = 'ok';
    return $go;
}

    echo go();
4

3 回答 3

60

来自导入的范围规则

use 关键字必须在文件的最外层范围(全局范围)或命名空间声明中声明。这是因为导入是在编译时而不是运行时完成的,所以它不能是块作用域

所以你应该这样说,应该在全局级别指定使用

require('/var/load.php');
use test\Class;

function go(){
    $go = 'ok';
    return $go;
}
echo go();

查看以下手册中的示例 5 请参阅http://php.net/manual/en/language.namespaces.importing.php中的手册

于 2013-08-14T09:14:33.220 回答
5

手册

use关键字必须在文件的最外层范围(全局范围)或命名空间声明中声明。

于 2013-08-14T09:07:39.230 回答
0

从我收集到的很多人在包含一个单独的函数文件并尝试在该函数中使用静态方法时得到这个。例如在index.php

namespace foo/bar
require('func.php')
f();

并在func.php

function f() {
    StaticClass::static_method();
}

您只需要在func.php中声明命名空间 foo/bar (与您在index.php中声明它的方式相同),因此它应该如下所示:

namespace foo\bar
function f() {
    StaticClass::static_method();
}

以避免出现以下错误:

致命错误:未捕获的错误:在 func.php 中找不到类“StaticClass”

现在很明显,但我很困惑为什么 func.php 没有在“需要” func.php 的文件中继承命名空间声明

于 2020-04-23T15:52:36.813 回答