尝试在我自己的函数中使用名称空间时出现解析错误
require('/var/load.php');
function go(){
use test\Class;
$go = 'ok';
return $go;
}
echo go();
答案 0 :(得分:54)
必须在文件的最外层范围内声明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
上的手册答案 1 :(得分:4)
来自the manual:
use
关键字必须在文件的最外层(全局范围)或命名空间内声明中声明。
答案 2 :(得分: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的文件内的命名空间声明