2014-10-29 1 views
1

내가 네임 스페이스없이 PHP 파일을 생성하는 드리프트를 사용하여 생성 된 PHP 파일에 클래스 이름에서와 같은 (I 네임 스페이스 후를주고 싶다) Calculator.php을 생성합니다 :제거 먼저 ""드리프트

namespace ; //error but no problem, i will give namespace after 

interface CalculatorIf { 

    public function ping(); 

} 

//problem at "\CalculatorIf" 
class CalculatorClient implements \CalculatorIf { 
    //thrift code ...    
} 

문제입니다 "\ CalculatorIf", 그 \ CalculatorIf이 속한 의미 루트 네임 스페이스 (또는 공간) 내가 예 : "네임 스페이스 MyNS으로 새로운 네임 스페이스를 (부여 할 때 "), \ CalculatorIf가 bel가 아니기 때문에 에러가 발생합니다 내 새로운 네임 스페이스를 설정하십시오. "CalculatorIf"("\"제외)이 생성되면이 문제없이 이름 공간이 변경됩니다. 끔찍한 곳이 많이 있습니다! '

내가 아래 동일합니다 :

php (PHP): 
    inlined:   Generate PHP inlined files 
    server:   Generate PHP server stubs 
    oop:    Generate PHP with object oriented subclasses 
    rest:   Generate PHP REST processors 
    nsglobal=NAME: Set global namespace 
    validate:  Generate PHP validator methods 

그래서의 해결책이

는 드리프트 컴파일러를 호출 :

namespace ; 

interface CalculatorIf { 

    public function ping(); 

} 

//this is "CalculatorIf" and not "\CalculatorIf" 
class CalculatorClient implements CalculatorIf { 
    //thrift code ...    
} 
+0

그렇다면 의도 한대로 도구를 사용하지 않고 결과에 대해 불만을 제기하고 계십니까? 그게 당신이 말하는거야? – JensG

+0

아니오, 중고품 파일 (또는 다른 것)에 중고품 파일을 생성하면 정상적으로 작동합니다. 이러한 언어는 네임 스페이스 또는 클래스 이름 앞에 "\"가 없기 때문입니다. PHP는 루트 네임 스페이스를 지정하기 위해 "\"를 사용하고, Thrift는 항상 클래스 경로의 헤드에 "\"를 항상 기본으로 추가합니다 (컴파일러 프로세스의 경우 간단 함). 필자는 "\"만 제거하거나, file.php의 모든 클래스가 (다른 클래스에 의해) 상대적으로 절대적으로 사용되지 않도록 도움을주고 싶습니다. – Deka

+0

그래,하지만 그것이 [작동 방법] (http://php.net/manual/en/language.namespaces.global.php)입니다. 문제는 이후에 * 네임 스페이스를 변경하는 접근 방식에 기인합니다. 당신은 그렇게하고 싶어합니다. 하지만 그 일을 제대로 수행 할 책임은 당신에게 있습니다. 또는 내 대답에 제안 된 접근법을 사용하면 원하는 결과를 얻을 수 있습니다. – JensG

답변

1

는 PHP 생성이 thrift --help 당신이 표시 옵션을 제공합니다 이렇게 :

이 결과는

이됩니다.
interface CalculatorIf extends \wtf\SharedServiceIf { 
+0

도움을 주셔서 감사합니다, 나는 그것을 시도했지만 아직이 문제는 해결되지 않았습니다 (클래스 경로 "\ wtf \ SharedServiceIf"의 머리 부분에 "\"가 추가됩니다 - 이것은 절대 클래스 경로입니다). 그러나, 나는 나의 일을하고 당신의 제공을 사용하는 나의 방법을 바꿀 수 있었다. 추신 : 나는 "네임 스페이스"의 이름을 변경하여 어디에서나 이동할 수있는 파일을 생성하려고합니다. 하지만 이제는 이름을 바꾸어야합니다 ("\"제거). – Deka

+1

"* 어디에서나 이동할 수있는 파일을 생성하고 싶습니다."- 원하는대로 많은 수의'nsglobal ='을 사용하여 thrift 컴파일러를 자주 호출 할 수 있습니다. 파일을 수동으로 편집하는 것보다 빠릅니다. – JensG

+0

맞아, 그렇게 할거야. 나는 "클래스가 상대적으로 내부 네임 스페이스에 사용되지만 절대 경로를 사용할 때 편안함을 느끼지 못한다" – Deka

관련 문제