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

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

问题描述:

我是新来的PHP命名空间,我有什么是:如何防止内置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的定义),它已经在这里找到答案:Get the http headers from current request in PHP

+0

让我知道如果你需要我的答案任何帮助。 –

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

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

+1

我被其他答案困惑了。因为我有多个第三方库,它们在名称空间类中调用标准php函数。他们没有在每百个内置的php函数前面有一个反斜杠......但类定义文件充斥着命名空间(比如,paypal rest api)。所以你的答案最有意义! – IncredibleHat

+0

如果有另一个名称空间定义一个具有相同名称的函数,则这是必需的。 –

+1

@TomMettam如果您已经在名为getallheaders()的当前名称空间中定义了另一个函数,那么您将使用'\ getallheaders()'来访问全局函数,但这不是这种情况。 – Devon

通过添加在前面一个反斜杠如下所示:$headers = \getallheaders();

如果您不在函数前面添加此反斜线,它会假定该函数与其从中调用的类位于同一个命名空间中。添加反斜杠使得它可以在全局命名空间中查找该函数,这是函数所在的位置。