如何防止内置PHP函数变为命名空间?

如何防止内置PHP函数变为命名空间?,php,namespaces,Php,Namespaces,我不熟悉PHP名称空间,我拥有的是: namespace Foo\Bar; class JsonAssetRest{ static function ini(){ $headers = getallheaders(); } } JsonAssetRest::ini(); 这就产生了错误 Uncaught Error: Call to undefined function Foo\Bar\getallheaders() in /var/www/html/clas

我不熟悉PHP名称空间,我拥有的是:

namespace Foo\Bar;
class JsonAssetRest{
    static function ini(){
        $headers = getallheaders(); 
    }
}
JsonAssetRest::ini();
这就产生了错误

Uncaught Error: Call to undefined function Foo\Bar\getallheaders() in /var/www/html/class JsonAssetRest.php
如何使用getallheaders()(内置函数)而不出现此错误

编辑:问题与在我将代码转换为命名空间类时删除库有关。该库为nginx定义了getallheaders。我对添加名称空间的错误消息感到困惑,并认为这就是问题所在

如果其他人在调试时被错误弄糊涂了,我会把它保留下来。因为这些评论提高了我对PHP中名称空间的理解


Edit2:如果有人偶然发现此错误,并想知道如何解决实际问题(getallheaders未在nginx下定义),这里的答案是:

在函数前面添加反斜杠,如下所示:
$headers=\getallheaders()


如果不在函数前面添加此反斜杠,它将假定函数与调用它的类位于同一命名空间中。添加反斜杠使其能够在全局名称空间中查找该函数,该名称空间是函数所在的位置。

在函数前面添加反斜杠,如下所示:
$headers=\getallheaders()


如果不在函数前面添加此反斜杠,它将假定函数与调用它的类位于同一命名空间中。添加反斜杠使其能够在全局名称空间中查找该函数,该名称空间是函数所在的位置。

全局函数可从任何名称空间中使用。您不需要像其他答案所建议的那样添加
\
前缀


此错误意味着在名为getallheaders()的全局或当前命名空间中没有定义函数。此函数是apache_response_headers()的别名,它也可能不存在。我假设PHP不是作为这些函数所需的apache模块运行。

全局函数可从任何名称空间获得。您不需要像其他答案所建议的那样添加
\
前缀


此错误意味着在名为getallheaders()的全局或当前命名空间中没有定义函数。此函数是apache_response_headers()的别名,它也可能不存在。我假设PHP没有作为这些函数所需的apache模块运行。

如果您需要我的答案的帮助,请告诉我。如果您需要我的答案的帮助,请告诉我。其他答案让我感到困惑。因为我有多个第三方库,它们在名称空间类中调用标准php函数。在每一百个内置php函数前面没有反斜杠。。。但是类define文件充满了名称空间(例如,paypalrestapi)。所以你的答案最有意义!如果有另一个命名空间定义了一个同名函数,这是必需的。@TomMettam如果您在当前命名空间中定义了另一个名为getallheaders()的函数,那么您将使用
\getallheaders()
访问全局函数,但这里不是这样。这是正确的答案。问题是,当我将代码转换成一个名称空间的类时,我还删除了一些库。其中一个库可能为nginx定义了getallheaders。我被其他答案弄糊涂了。因为我有多个第三方库,它们在名称空间类中调用标准php函数。在每一百个内置php函数前面没有反斜杠。。。但是类define文件充满了名称空间(例如,paypalrestapi)。所以你的答案最有意义!如果有另一个命名空间定义了一个同名函数,这是必需的。@TomMettam如果您在当前命名空间中定义了另一个名为getallheaders()的函数,那么您将使用
\getallheaders()
访问全局函数,但这里不是这样。这是正确的答案。问题是,当我将代码转换成一个名称空间的类时,我还删除了一些库。其中一个库可能为nginx定义了getallheaders。