Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在函数内部使用php命名空间_Php_Function_Namespaces - Fatal编程技术网

在函数内部使用php命名空间

在函数内部使用php命名空间,php,function,namespaces,Php,Function,Namespaces,当我试图在自己的函数中使用名称空间时,我遇到了一个解析错误 require('/var/load.php'); function go(){ use test\Class; $go = 'ok'; return $go; } echo go(); 发件人: use关键字必须在文件的最外层范围(全局范围)或命名空间声明内部声明 从 use关键字必须在文件的最外层范围( 全局范围)或内部命名空间声明。这是因为 导入是在编译时而不是运行时完成的,因此不能 块范围

当我试图在自己的函数中使用名称空间时,我遇到了一个解析错误

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

function go(){

  use test\Class;

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

    echo go();
发件人:

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

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

所以您应该这样放置,应该在全局级别指定use

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

function go(){
    $go = 'ok';
    return $go;
}
echo go();
检查以下手册中的示例5
请参考其手册,从我收集的信息来看,很多人在包含一个单独的函数文件并试图在该函数中使用静态方法时都会得到这个信息。。例如在index.php中

namespace foo/bar
require('func.php')
f();
function f() {
    StaticClass::static_method();
}
func.php中

namespace foo/bar
require('func.php')
f();
function f() {
    StaticClass::static_method();
}
您只需在func.php中声明名称空间foo/bar(与在index.php中声明名称空间foo/bar的方式相同),因此它应该类似于:

namespace foo\bar
function f() {
    StaticClass::static_method();
}
要避免以下错误:

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


现在很明显,但我感到困惑的是,为什么func.php没有在“requires”func.php文件中包含名称空间声明,php解析错误:语法错误,第8行的/var/www/test.php中意外使用了T_为什么要这样做<代码>使用只是建立一个文件范围的别名,不多不少。在函数中这样做有什么意义?@westnblue它意味着
use
语句只能出现在打开文件后运行的代码部分。如果您将它放在一个类或函数中,它将在调用该类或函数时执行。这与PHP系统的名称空间和解析代码不兼容,因此您必须将
use
语句放在文件的最外层范围内。省去了我在函数中放入“use”的名称空间的问题。thanksNamespaces与作用域无关,因此我在这里避免使用该术语的歧义…@deceze请指定一些链接,以便清楚地理解php中的名称空间和作用域。。。?您已经链接到一个:手册。变量作用域和名称空间只是两个完全不同的概念。@deceze根据我的理解,名称空间与unix中的“alias”命令相同,但为什么它只有全局作用域呢?为什么我不能在函数中定义它,范围仅限于该函数?我想,请帮助理解这一点,因为这一点的使用将非常有限,而且会带来混乱。在一个函数中,您使用Foo\Bar作为MyClass,而在同一文件中的另一个函数中,您使用Foo\Baz作为MyClass。这很容易在阅读源代码时引入一些令人困惑的小错误。因此,
use
指令一次应用于整个文件/命名空间。我还没有遇到过这样的情况,即这是不够的。