在函数内使用php命名空间

时间:2013-08-14 09:06:05

标签: php function namespaces

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

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

function go(){

  use test\Class;

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

    echo go();

3 个答案:

答案 0 :(得分:54)

来自Scoping rules for importing

  

必须在文件的最外层范围内声明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的文件内的命名空间声明