어떻게 PHP 핵심 특성 네 임 스페이스 를 이해 합 니까?

제기 하 다
PHP 는 5.3 이후 구성 요소 간 의 이름 충돌 문 제 를 해결 하기 위해 네 임 스페이스 를 제 시 했 고 주로 파일 시스템 의 디자인 을 참고 했다.
  • 같은 디 렉 터 리 에서 같은 파일 이름 을 허용 하지 않 습 니 다.-같은 네 임 스페이스 에서 같은 클래스 를 허용 하지 않 습 니 다
  • 4.567917.서로 다른 디 렉 터 리 는 같은 이름 의 파일 이 있 을 수 있 습 니 다.-서로 다른 네 임 스페이스 는 같은 종 류 를 가 질 수 있 습 니 다정의.
    네 임 스페이스 키 워드 를 사용 하여 네 임 스페이스 를 정의 합 니 다.그 중에서 최상 위 네 임 스페이스 는 보통 제조 업 체 이름 이 고 서로 다른 개발 자의 제조 업 체 네 임 스페이스 는 유일한 것 입 니 다.네 임 스페이스 는 파일 디 렉 터 리 와 일일이 대응 할 필요 가 없 지만 PSR-4 규범 을 지 키 는 것 이 좋 습 니 다.
    
    <?php
    
    namespace Symfony\Component\HttpFoundation;
    
    class Request {
    
    }
                   ,        declare    。
    
    <?php
    
    declare(strict_types=1);
    
    namespace App;
    네 임 스페이스 에는 임의의 PHP 코드 가 포함 되 어 있 지만 클래스(추상 클래스 와 Trait 포함),인터페이스,함수 와 상수 등 네 가지 유형 만 적 용 됩 니 다.
    
    <?php
    namespace MyProject;
    
    const CONNECT_OK = 1;
    class FOO {}
    interface Foo{}
    function foo() {}
    쓰다
    use 키 워드 를 사용 하여 네 임 스페이스 를 도입 합 니 다.
    
    <?php
    
    namespace App;
    
    use Symfony\Component\HttpFoundation\Request;
    use Foo\Bar;
    
    class Test {
        public function run()
        {
            $bar = new Bar();
        }
    }
    PSR-2 규범 에 따라 정의 및 사용 추천
  • namespace 이후 에 빈 줄 이 있어 야 합 니 다
  • 모든 use 성명 은 namespace 성명 뒤에 있어 야 합 니 다
  • 모든 use 성명 은 use 키워드 만 있어 야 합 니 다
  • use 구문 블록 뒤에 빈 줄 이 있어 야 합 니 다.
    use 가 도입 한 클래스 에 같은 이름 이 나타 날 때 as 를 사용 하여 별명 을 정의 할 수 있 습 니 다.
    
    <?php
    
    namespace App;
    
    use Foo\Bar as BaseBar;
    
    class Bar extends BaseBar {
    
    }
    한정 부호
    use 를 사용 하 는 것 외 에 도\한정 부 를 직접 사용 하여 해석 할 수 있 습 니 다.규칙 은 간단 합 니 다.\접 두 사 를 포함 하면 전체 네 임 스페이스 부터 해석 하 는 것 을 의미 합 니 다.그렇지 않 으 면 현재 네 임 스페이스 부터 해석 하 는 것 을 의미 합 니 다.
    
    <?php
    
    namespace App;
    
    \Foo\Bar\foo();  //     \Foo\Bar\foo();
    Foo\Bar\foo();  //     App\Foo\Bar\foo();
             、   
    
    $a = \strlen('hi'); //        strlen
    $b = \INI_ALL; //        INI_ALL
    $c = new \Exception('error'); //        Exception
    특별히 주의해 야 할 두 가지 가 있다.
    함수 와 상수 의 경우 현재 네 임 스페이스 가 존재 하지 않 으 면 자동 으로 전역 네 임 스페이스 에서 찾 을 수 있 으 므 로\접 두 사 를 생략 할 수 있 습 니 다.클래스 의 경우 현재 네 임 스페이스 가 해석 되 지 않 으 면 전역 공간 에서 찾 을 수 없 기 때문에 생략 할 수 없습니다\\
    
    $a = strlen('hi');
    $b = INI_ALL;
    $c = new Exception('error'); //   
    $c = new \Exception('error'); //   
    동적 으로 네 임 스페이스 를 호출 할 때 이 네 임 스페이스 는 항상 전역 네 임 스페이스 로 간주 되 므 로 접 두 사 를 생략 할 수 있 습 니 다\
    
    $class1 = 'Foo\Bar';
    $object1 = new $class1;  //        \Foo\Bar
    내부 에서 네 임 스페이스 에 접근 하기
    PHP 는 현재 네 임 스페이스 내부 요 소 를 추상 적 으로 접근 하 는 두 가지 방법 을 지원 합 니 다.NAMESPACE__마술 상수 와 namespace 키워드.
    __NAMESPACE__상수 값 은 현재 네 임 스페이스 이름 을 포함 하 는 문자열 입 니 다.전체 네 임 스페이스 에 있 으 면 빈 문자열 로 돌아 갑 니 다.
    
    <?php
    namespace MyProject;
    
    function get($classname)
    {
        $a = __NAMESPACE__ . '\\' . $classname;
        return new $a;
    }
    키워드 namespace 는 현재 네 임 스페이스 나 하위 네 임 스페이스 의 요 소 를 명시 적 으로 방문 할 수 있 습 니 다.그것 은 클래스 의 self 연산 자 와 같 습 니 다.
    
    namespace App;
    
    use blah\blah as mine;
    
    blah\mine(); // App\blah\mine()
    namespace\blah\mine(); // App\blah\mine()
    
    namespace\func(); // App\func()
    namespace\sub\func(); // App\sub\func()
    namespace\cname::method(); // App\cname::method()
    $a = new namespace\sub\cname(); // App\sub\cname
    $b = namespace\CONSTANT; // App\CONSTANT
    기호
    또한,예상 치 못 한 결과 가 발생 하지 않도록 모든\\를 전의 하 는 것 을 추천 합 니 다.
    
    $class = "dangerous
    ame"; //
    $obj = new $class; $class = 'dangerous
    ame'; // , $class = 'dangerous\
    ame'; // $class = "dangerous\
    ame"; //
    이상 은 PHP 의 핵심 특성 인 네 임 스페이스 를 어떻게 이해 하 는 지 에 대한 상세 한 내용 입 니 다.더 많은 PHP 네 임 스페이스 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기