2017-11-11 6 views
0

은, 내가 무엇을 가지고 :내장 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

내 대답에 도움이 필요하면 알려주세요. –

답변

2

전역 함수는 모든 네임 스페이스에서 사용할 수 있습니다. 다른 답변과 마찬가지로 \ 접두사를 추가하지 않아도됩니다.

이 오류는 getallheaders()라는 전역 또는 현재 네임 스페이스에 정의 된 함수가 없음을 의미합니다. 이 함수는 존재하지 않는 apache_response_headers()의 별명입니다. PHP가 이러한 함수에 필요한 apache 모듈로 실행되고 있지 않다고 가정합니다.

+1

나는 그 다른 대답에 혼란스러워했다. 네임 스페이스 클래스에서 표준 PHP 함수를 호출하는 여러 타사 라이브러리가 있으므로. 그들은 백퍼센트 모든 PHP 함수 내장 된 앞에 백 슬래시 ...하지만 클래스 정의 파일 이름 공간 (예 : 페이팔 나머지 api)로 riddled 있습니다. 그래서 당신의 대답은 가장 이해가됩니다! – IncredibleHat

+0

같은 이름을 가진 함수를 정의하는 다른 네임 스페이스가 필요합니다. –

+1

@TomMettam 현재 네임 스페이스에서 getallheaders()라는 또 다른 함수를 정의한 경우 전역 함수에 액세스하려면'\ getallheaders()를 사용하지만 여기서는 그렇지 않습니다. – Devon

0

앞에 백 슬래시를 추가 함수의 앞에 백 슬래시를 추가하지 않으면이 함수가 호출 된 클래스와 동일한 네임 스페이스에 있다고 가정합니다. 백 슬래시를 추가하면 함수가있는 전역 네임 스페이스에서 해당 함수를 찾을 수 있습니다.