수색…


비고

PHP 문서에서 :

네임 스페이스 란 무엇입니까? 가장 넓은 정의에서 네임 스페이스는 항목을 캡슐화하는 방법입니다. 이것은 많은 곳에서 추상적 인 개념으로 볼 수 있습니다. 예를 들어, 모든 운영 체제 디렉토리에서 관련 파일을 그룹화하고 그 안에있는 파일의 네임 스페이스 역할을합니다. 예를 들어, foo.txt 파일은 / home / greg 디렉토리와 / home / other 디렉토리 모두에 존재할 수 있지만, foo.txt의 두 사본은 같은 디렉토리에 공존 할 수 없습니다. 또한 / home / greg 디렉토리 외부의 foo.txt 파일에 액세스하려면 /home/greg/foo.txt를 얻기 위해 디렉토리 구분자를 사용하여 파일 이름 앞에 디렉토리 이름을 추가해야합니다. 이와 동일한 원리가 프로그래밍 세계의 네임 스페이스에도 적용됩니다.

최상위 네임 스페이스 인 PHPphp 는 PHP 언어를 위해 예약되어 있습니다. 사용자 지정 코드에서 사용해서는 안됩니다.

네임 스페이스 선언하기

네임 스페이스 선언은 다음과 같습니다.

  • namespace MyProject; 네임 스페이스 MyProject 선언
  • namespace MyProject\Security\Cryptography; - 중첩 된 네임 스페이스 선언
  • namespace MyProject { ... } - 괄호로 둘러싸인 네임 스페이스를 선언하십시오.

단일 파일에서 원하는만큼 선언 할 수 있다고하더라도 파일 당 하나의 네임 스페이스 만 선언하는 것이 좋습니다.

namespace First {
    class A { ... }; // Define class A in the namespace First.
}

namespace Second {
    class B { ... }; // Define class B in the namespace Second.
}

namespace {
    class C { ... }; // Define class C in the root namespace.
}

네임 스페이스를 선언 할 때마다 정의한 클래스는 해당 네임 스페이스에 속합니다.

namespace MyProject\Shapes;

class Rectangle { ... }
class Square { ... }
class Circle { ... }

네임 스페이스 선언은 여러 파일에서 여러 번 사용할 수 있습니다. 위의 예제는 MyProject\Shapes 네임 스페이스에있는 세 개의 클래스를 단일 파일로 정의했습니다. 가급적이면이 파일은 세 개의 파일로 나뉘어지며 각각은 namespace MyProject\Shapes; 시작합니다 namespace MyProject\Shapes; . 자세한 내용은 PSR-4 표준 예제에서 설명합니다.

네임 스페이스에서 클래스 또는 함수 참조

Declaring Namespaces 에서 볼 수 있듯이 다음과 같이 네임 스페이스에 클래스를 정의 할 수 있습니다.

namespace MyProject\Shapes;

class Rectangle { ... }

이 클래스를 참조하려면 전체 경로 (네임 스페이스 포함)를 사용해야합니다.

$rectangle = new MyProject\Shapes\Rectangle();

use -statement를 통해 클래스를 가져 와서 단축 할 수 있습니다.

// Rectangle becomes an alias to MyProject\Shapes\Rectangle
use MyProject\Shapes\Rectangle;

$rectangle = new Rectangle();

PHP 7.0 use 여러 가지 use 문장을 괄호를 사용하여 하나의 문장으로 묶을 수 있습니다 :

use MyProject\Shapes\{
    Rectangle,         //Same as `use MyProject\Shapes\Rectangle`
    Circle,            //Same as `use MyProject\Shapes\Circle`
    Triangle,          //Same as `use MyProject\Shapes\Triangle`
    
    Polygon\FiveSides, //You can also import sub-namespaces
    Polygon\SixSides   //In a grouped `use`-statement
};

$rectangle = new Rectangle();

때로는 두 개의 클래스가 같은 이름을 가지고 있습니다. 다른 네임 스페이스에 있으면 문제가되지 않지만 use -statement로 가져 오기를 시도하면 문제가 될 수 use .

use MyProject\Shapes\Oval;
use MyProject\Languages\Oval; // Apparantly Oval is also a language!
// Error!

이는 as 키워드를 사용하여 직접 별칭의 이름을 정의하면 해결할 수 있습니다.

use MyProject\Shapes\Oval as OvalShape;
use MyProject\Languages\Oval as OvalLanguage;

현재 네임 스페이스 외부의 클래스를 참조하려면 \ 사용하여 이스케이프해야합니다. 그렇지 않으면 현재 네임 스페이스에서 상대 네임 스페이스 경로가 가정됩니다.

namespace MyProject\Shapes;

// References MyProject\Shapes\Rectangle. Correct!
$a = new Rectangle();

// References MyProject\Shapes\Rectangle. Correct, but unneeded!
$a = new \MyProject\Shapes\Rectangle(); 

// References MyProject\Shapes\MyProject\Shapes\Rectangle. Incorrect!
$a = new MyProject\Shapes\Rectangle(); 


// Referencing StdClass from within a namespace requires a \ prefix
// since it is not defined in a namespace, meaning it is global.

// References StdClass. Correct!
$a = new \StdClass(); 

// References MyProject\Shapes\StdClass. Incorrect!
$a = new StdClass(); 

네임 스페이스 란 무엇입니까?

PHP 커뮤니티에는 많은 코드를 작성하는 많은 개발자가 있습니다. 이것은 한 라이브러리의 PHP 코드가 다른 라이브러리와 동일한 클래스 이름을 사용할 수 있음을 의미합니다. 두 라이브러리가 같은 네임 스페이스에서 사용될 때 충돌하여 문제를 일으 킵니다.

네임 스페이스가이 문제를 해결합니다. PHP 참조 설명서에 설명 된 것처럼 네임 스페이스는 네임 스페이스 파일이있는 운영 체제 디렉토리와 비교 될 수 있습니다. 동일한 이름의 두 파일이 별도의 디렉토리에 공존 할 수 있습니다. 마찬가지로 동일한 이름을 가진 두 개의 PHP 클래스가 별도의 PHP 네임 스페이스에 공존 할 수 있습니다.

다른 라이브러리와 충돌 할 염려없이 다른 개발자가 사용할 수 있도록 코드의 네임 스페이스를 지정하는 것이 중요합니다.

하위 네임 스페이스 선언

계층 구조를 사용하여 단일 네임 스페이스를 선언하려면 다음 예를 참조하십시오.

namespace MyProject\Sub\Level;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }

위의 예제는 다음을 생성합니다.

상수 MyProject\Sub\Level\CONNECT_OK

MyProject\Sub\Level\Connection 클래스

함수 MyProject\Sub\Level\connect



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow