>백엔드 개발 >PHP 튜토리얼 >PHP 네임스페이스 개념 분석

PHP 네임스페이스 개념 분석

伊谢尔伦
伊谢尔伦원래의
2016-11-25 13:48:001298검색

1. PHP의 네임스페이스란 무엇인가요?

네임스페이스란 무엇인가요? "넓게 말하면 네임스페이스는 사물을 캡슐화하는 방법입니다. 이 추상적인 개념은 여러 곳에서 볼 수 있습니다. 예를 들어 운영 체제에서 디렉터리는 관련 파일을 그룹화하는 데 사용됩니다. 디렉터리에 있는 파일의 경우 디렉터리 역할을 합니다. 예를 들어, foo.txt 파일은 /home/greg 및 /home/other 디렉토리에 동시에 존재할 수 있지만 foo.txt 파일에 액세스할 때 두 개의 foo.txt 파일이 동일한 디렉토리에 존재할 수는 없습니다. /home/greg 디렉토리 외부에 /home/greg/foo.txt를 얻으려면 파일 이름 앞에 디렉토리 이름과 디렉토리 구분 기호를 넣어야 합니다. 이 원칙은 네임스페이스 개념으로 프로그래밍 분야에 적용됩니다. 개요

 2. PHP 네임스페이스를 어떻게 이해하나요?

본질적으로 네임스페이스는 클래스, 함수 및 변수를 이 컨테이너에 넣을 수 있으며 동일한 네임스페이스에서 무조건 서로 액세스할 수 있습니다. 네임스페이스 외부에 포함된 항목을 호출하려면 다른 네임스페이스를 참조하거나 가져와야 합니다.

네임스페이스의 개념은 셸의 파일 디렉터리와 동일합니다. 현재 디렉터리에 있는 파일 이름으로 모든 파일에 직접 접근할 수 있습니다. 다른 디렉터리에 있는 파일에 접근하려면 상대 경로나 절대 경로를 입력해야 합니다.
참조 방법:

namespace foo;
 class Foo {   
         public function foo()   
         {
              return \top\namespace\bar\Bar::fuck();  
         }
 }

가져오기 방법:

namespace foo; 
use top\namespace\bar\Bar; 
 class Foo {
        public function foo() 
        {        
            return Bar::fuck();  
        }
 }

가져오기는 대상 클래스를 현재 네임스페이스에 복사하는 것과 같습니다.

 3. PHP 네임스페이스의 실제 응용 분야는 무엇입니까?

네임스페이스의 존재는 다음 두 가지 문제를 해결하기 위한 것입니다.

1. 사용자가 작성한 코드와 PHP 내부의 클래스/함수/상수 또는 타사 클래스/함수/ 사이 상수 이름 충돌.

 2. 소스 코드의 가독성을 높이기 위해 매우 긴 식별자 이름(일반적으로 첫 번째 유형의 문제를 완화하기 위해 정의됨)에 대한 별칭(또는 짧은) 이름을 만듭니다.

 4. 몇 가지 팁

 1. 같은 공간의 수업은 서로 직접 부르며 같은 가족에 속합니다. 예를 들어, Laravel의 PageController 클래스에서는 Page::all()과 같은 코드를 직접 작성하여 Page 모델을 호출할 수 있습니다. 둘 다 최상위 네임스페이스 아래에 있기 때문입니다.

2. 클래스가 최상위가 아닌 네임스페이스에 존재하는 경우 "참조" 또는 "가져오기" 없이 동일한 현재 네임스페이스에 있는 다른 클래스만 호출할 수 있습니다. 모든 하위 네임스페이스는 컨테이너 간의 관계 외에는 특별한 관계가 없는 또 다른 네임스페이스, 또 다른 컨테이너입니다.

3. Laravel은 자동 로딩(autoload)을 위해 클래스맵 방식을 사용합니다. PHP에는 네임스페이스라는 고급 기능이 있지만 이는 논리적 관계일 뿐이므로 require 파일이 여전히 필요합니다. 이 클래스와 파일 간의 대응 관계는 /vendor/composer/autoload_classmap.php에 존재하며, Composer dump-autoload는 매번 재컴파일되어 생성됩니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.