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