
네임스페이스는 PHP 인터프리터가 동일한 이름을 공유하는 두 개의 클래스, 함수, 상수가 서로 다르다는 것을 알려줄 수 있다.
코드가 네임스페이스에 속해 있음을 나타내기 위해, 네임스페이스 선언namespace declaration을 PHP 파일의 시작 부분에 추가한다. 그러면 파일에 선언된 모든 클래스, 함수, 상수는 그 네임스페이스에 있게 된다.
namespace PhpBook\CMS;
PHP의 내장 클래스, 함수, 그리고 상수는 네임스페이스가 제공되지 않은 사용자 정의 클래스, 함수, 변수, 상수와 함께 전역 네임스페이스global namespace에 있다. 이것은 컴퓨터의 루트 폴더와 같다.
네임스페이스를 만드는 것은 전역 네임스페이스 안에 폴더를 만드는 것과 같다. 이것은 PHP 인터프리터가 같은 이름을 공유하는 둘 이상의 클래스, 함수, 상수를 구별할 수 있게 한다.
PHP 페이지가 네임스페이스에 있는 코드를 사용할 때는 다음으로 구성된 정규화된 네임스페이스를 사용해야 한다.
전역 네임스페이스를 나타내는 역슬래시
클래스에 대한 네임스페이스
클래스, 함수, 또는 상수 이름
$cms = new \PhpBook\CMS\CMS($dsn, $username, $password);
이것은 PhpBook\CMS 네임스페이스의 CMS 클래스를 사용하여 CMS 객체를 생성한다. 네임스페이스를 접두사처럼 사용하지 않으면, PHP 인터프리터는 추가된 네임스페이스가 아닌 전역 네임스페이스에서 해당 클래스, 함수, 상수를 찾을 것이므로, 찾을 수 없을 것이다.
클래스를 사용하고자 할 때마다 정구화된 네임스페이스를 입력하지 않기 위해, 클래스를 현재 네임스페이스로 가져올 수 있다.
Validate 클래스는 클래스를 다른 네임스페이스로 가져오는 예다. 그 클래스의 메서드는 폼이 검증될 때 여러 번 호출된다.
이러한 메서드를 호출하기 위해서는 반복적으로 정규화된 네임스페이스, 클래스 이름, 그리고 메서드 이름을 사용하면 된다.
\PhpBook\Validate\Validate::isText();
또는 Validate 클래스를 현재의 네임스페이스로 가져올 수 있다. 이를 위해 use 키워드, 네임스페이스, 그리고 클래스 이름을 파일 시작 부분에 추가하자.
use \PhpBook\Validate\Validate;
이제 클래스를 현재의 네임스페이스로 가져왔으므로 클래스 이름 다음에 메서드 이름을 사용하여 해당 메서드를 호출할 수 있다.
Validate::isText();
만약에 현재 네임스페이스에 Validate 클래스가 이미 있다면, 이것은 명명 충돌이 발생할 것이다. 이 문제를 해결하려면 가져온 클래스를 참조하는 데 사용할 수 있는 이름인 앨리어스alias를 추가할 수 있다.
use \PhpBook\Validate\Validate as FormValidate;
그러면 객체를 생성하거나 해당 메서드를 호출할 때 클래스 이름 대신에 앨리어스 이름을 사용할 수 있다. 앨리어스를 생성하기 위해 클래스를 가져올 때 위처럼 as 키워드를 사용하고 사용할 앨리어스 이름을 주면 된다.
출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022