2014-12-21 2 views
1

PHP에 컴파일러를 지정하고 네임 스페이스에 문제가 있습니다.PHP의 중첩 네임 스페이스

그들은 내 언어로이 같은 모양 : 물론

package Foo 
{ 
    package Bar 
    { 
     class X { } 
    } 

    class Y { } 
} 

은, PHP가 중첩 된 네임 스페이스를 처리하지 않습니다. PHP에서 여전히 작동하도록이 코드를 번역하는 가장 좋은 방법은 무엇입니까?

모든 파일은 결국 하나의 PHP 파일로 컴파일됩니다. 한 가지주의해야 할 점은 패키지를 닫은 후에 글로벌 네임 스페이스로 돌아 가야한다는 것입니다. 그리고 어떻게해야 할 지에 대한 문서를 찾지 못했습니다. PHP에서는 네임 스페이스를 선언하면 전체 파일에 적용됩니다.

+0

http://php.net/manual/en /language.namespaces.definitionmu ltiple.php – Goikiu

+0

좋아, 아마도 다른 사람들이 찾고있는 완벽한 해결책이 없다.하지만 나는 뭔가 효과가있다. 분명히 컴파일 된 코드는 소스 코드를 정확히 나타내야 할 필요는 없으며 완벽하게 읽을 필요가 없습니다. 따라서 가장 간단한 해결책은 클래스 자체에 네임 스페이스를 포함시키는 것입니다. 즉 class Foo__Bar__X {} class Foo_Y {} $ f = new Foo__Bar__X(); 간단하고 클래스를 컴파일하는 순서를 완전히 재정렬 할 필요가 없습니다. – Zotoaster

답변

7

네임 스페이스 선언을 중첩 할 수 없다는 사실은 사실입니다 .Namespacing은 충돌하는 정의를 피하고 코드에서 유연성과 조직을 도입하는 데 사용됩니다. 네임 스페이스 코드 블록을 둘러싼 대괄호는 완전히 선택 사항입니다. 코드를 번역하려면 PHP로 실행할 수 있습니다. 같은 당신은 쓸 수 있습니다 : 당신이 더 많은 정보가 필요하면 당신이 잘 예와 엘리야 Zerrouq에 의해 쓰여진이 링크를 볼 수 있습니다

namespace Foo\Bar; 

class X{ 
    // Your properties 
} 
class Y { 
// Your properties 
} 

http://code.tutsplus.com/tutorials/namespacing-in-php--net-27203

+0

그러나 클래스 X는 Foo.Bar 안에 있고 클래스 Y는 Foo 안에 있습니다. – Zotoaster

+0

http://php.net/manual/en/language.namespaces.importing.php 여기에서 1 등급 후에 작성하려는 앨리어스/가져 오기 클래스를 알 수 있습니다. – Mahsin

+0

대단히 감사합니다. :) – Mahsin

0

Zotoaster 당신이 원하는 일을하는 것은 매우 가능하다; 그러나 내 솔루션은 psr-4 자동 로딩 솔루션에 의존합니다.

$x = new X(); 
$y = new Y(); 

:

use Foo\Bar\X; 
use Foo\Y; 

그 후 그에 따라 클래스를 인스턴스화 할 수 있습니다 :이, 해당 폴더에 파일을 배치하여, 당신은 PHP 파일의 시작에서 다음을 수행 할 수있을 것입니다 여기에 네임 스페이스 사용 방법에 대한 자세한 내용을 참조하십시오. http://www.php-fig.org/psr/psr-4/ 또한 "더티 일"을 처리하기 위해 작곡가를 사용할 수 있습니다. 즉, 모든 자동 로딩 : https://getcomposer.org/doc/01-basic-usage.md#autoloading