목차
1: 네임스페이스 개념: 네임스페이스는 디렉터리 및 파일과 유사하게 사물을 캡슐화하는 방법입니다.
둘: 네임스페이스를 정의하는 방법
세 가지: 네임스페이스 식별 원칙
四:命名空间在字符串中的转义
백엔드 개발 PHP 튜토리얼 PHP 네임스페이스 사용법에 대한 자세한 설명

PHP 네임스페이스 사용법에 대한 자세한 설명

May 18, 2018 pm 02:36 PM
php 사용 상해

이번에는 php 네임스페이스 사용에 대한 자세한 설명을 들고 왔고, php 네임스페이스 사용 시 주의사항은 무엇인지 살펴보겠습니다.

1: 네임스페이스 개념: 네임스페이스는 디렉터리 및 파일과 유사하게 사물을 캡슐화하는 방법입니다.

네임스페이스로 해결된 문제(설명서도 매우 명확하게 작성되었으며 아래 내 이해에 따라 단순화되었습니다.):

1: 프로그램 작성자가 직접 작성한 클래스, 상수, 함수 및 PHP 내부 또는 제3자가 작성한 함수의 출현 해결 당사자 이름 충돌 상황.

2: 클래스, 상수, 함수의 이름이 너무 긴 문제를 해결하고 코드의 가독성을 높이는 데 도움이 되는 별칭을 만듭니다. 또한 일반적으로 첫 번째 유형의 문제를 완화하면 이름이 너무 길어지는 문제가 발생합니다.

둘: 네임스페이스를 정의하는 방법

1: 네임스페이스는 네임스페이스 키워드로 선언됩니다. 동시에 네임스페이스는 PHP가 아닌 코드 및 공백 문자를 포함한 다른 코드 앞에 위치해야 합니다(선언 키워드 제외). php), 그렇지 않으면 치명적인 오류가 발생합니다.

예:

<?php 
namespace Index; 
?>
로그인 후 복사

참고 1: 네임스페이스 앞에 코드나 공백이 없는데도 여전히 치명적인 오류가 발생하는 경우 BOM 헤더로 인해 발생한 것입니다.
참고 2: 모든 합법적인 PHP 코드는 네임스페이스 아래에 배치될 수 있지만 네임스페이스의 영향을 받는 유일한 클래스(추상 클래스 및 특성)와 인터페이스, 상수 및 함수는 다음과 같습니다.

2: 디렉터리와 파일 간의 관계와 마찬가지로 PHP 네임스페이스를 사용하면 계층적 네임스페이스 이름을 지정할 수도 있습니다. 따라서 네임스페이스 이름은 .

예:

<?php 
namespace Index\Col\File; 
define(&#39;MESSAGE&#39;,&#39;hello world&#39;); 
?>
로그인 후 복사

3: 하나의 파일에 여러 개의 네임스페이스를 정의할 수 있습니다. 두 가지 정의 구문이 있는데, 하나는 단순 조합 구문이고, 다른 하나는 중괄호 구문입니다. 다른 파일은 여러 이름을 정의합니다. 공백 사용은 일반적으로 다음과 같습니다. 여러 파일이 하나의 파일로 병합되는 시나리오이지만 꼭 필요한 경우가 아니면 코드가 복잡해지고 가독성이 떨어지기 때문에 이 방법을 사용하지 않는 것이 가장 좋습니다 .

간단한 조합 구문:

<?php 
namespace Index; 
const INSTANCE=1; 
 
namespace Col; 
const INSTANCE=2; 
?>
로그인 후 복사

Braces 구문, 하나의 파일에 여러 개의 네임스페이스가 있습니다. 네임스페이스가 아닌 코드를 작성해야 하는 경우 중괄호 구문만 사용할 수 있으며, 네임스페이스가 아닌 코드는 네임스페이스를 사용하여 이름이 지정되지 않은 네임스페이스를 선언합니다. , 다음 중괄호를 사용하세요.

<?php 
/*命名空间Index*/ 
namespace Index{ 
  const INSTANCE=1; 
} 
 
/*命名空间Col*/ 
namespace Col{ 
  const INSTANCE=2; 
} 
 
/*全局非命名空间代码*/ 
namespace { 
  const INSTANCE=3; 
} 
?>
로그인 후 복사

4: 여러 개의 서로 다른 파일이 동일한 네임스페이스를 정의할 수 있습니다. 즉, 동일한 네임스페이스의 콘텐츠가 여러 개의 서로 다른 파일에 저장될 수 있습니다.

세 가지: 네임스페이스 식별 원칙

네임스페이스 사용 원칙이 사용되는 경우는 세 가지가 있습니다. 실제로는 설명서에 자세히 설명되어 있지만 번역 문제로 인해 약간의 혼란이 생길 ​​수 있습니다. 여기서는 단순화하여 직접 사용하겠습니다. 정리하는 예:

1: 한정된 이름이 없습니다. 즉, 읽어들이려는 클래스, 상수, 함수, 인터페이스 이름을 그대로 사용합니다. 이 경우에는 클래스, 상수, 함수, 인터페이스 이름을 사용합니다. 내용이 속한 네임스페이스의 이름을 읽어오지만, 네임스페이스에 관련 이름이 없는 경우 데이터가 클래스 또는 인터페이스 이름인 경우 치명적인 오류가 반환됩니다. 함수 또는 상수, 전역 함수 및 상수는 자동으로 읽혀집니다. 전역 함수와 상수가 없으면 치명적인 오류가 보고됩니다.

다음 예:

<?php 
/*全局非命名空间代码*/ 
namespace { 
  const INSTANCE=1; 
 
  function test(){ 
    echo 1; 
  } 
 
  class foo{ 
    static function fool(){ 
          echo 1; 
        } 
  } 
 
  var_dump(INSTANCE);   //打印出来的是1 
 
  test();       //输出1 
 
  foo::fool();      //输出1 
 
} 
 
/*命名空间Index*/ 
namespace Index{ 
  const INSTANCE=2; 
 
  function test(){ 
    echo 2; 
  } 
 
  class foo{ 
    static function fool(){ 
          echo 2; 
        } 
  } 
 
  var_dump(INSTANCE);   //打印出来的是2 
 
  test();     //输出2 
 
  foo::fool();    //输出2 
} 
 
/*命名空间Col*/ 
namespace Col{ 
  const INSTANCE=3; 
 
  function test(){ 
    echo 3; 
  } 
 
  class foo{ 
    static function fool(){ 
          echo 3; 
        } 
  } 
 
  var_dump(INSTANCE);   //打印出来的是3 
 
  test();     //输出2 
   
  foo::fool();    //输出2 
} 
?>
로그인 후 복사

위 예에서 각 네임스페이스 출력에는 정규화된 이름이 없으므로 현재 네임스페이스에 설정된 해당 데이터 값을 가져옵니다.

현재 네임스페이스에 설정이 없으면 함수와 상수는 전역적으로 설정된 해당 데이터 값을 읽습니다. 치명적인 오류는 해당 전역 설정이 없는 경우에만 보고됩니다. 클래스와 인터페이스는 치명적인 오류를 직접 보고합니다. 다음 코드에 나와 있습니다.

<?php 
/*全局非命名空间代码*/ 
namespace { 
  const INSTANCE=1;  
  function test(){ 
    echo 1; 
  } 
 
  class foo{ 
    static function fool(){ 
          echo 1; 
        } 
  } 
 
  var_dump(INSTANCE);   //打印出来的是1  
  test();     //输出1  
  foo::fool();    //输出1  
} 
 
/*命名空间Index*/ 
namespace Index{ 
  var_dump(INSTANCE);   //打印出来的是1  
  test();     //输出1  
  foo::fool();    //fatal error 
 
} 
?>
로그인 후 복사

2: 한정된 이름은 두 가지 상황으로 나누어집니다. 하나는 접두사를 포함하는 한정된 이름의 경우이고, 다른 하나는 전역 한정된 이름을 포함하는 경우입니다. 매뉴얼에서는 이 두 가지 유형을 별도로 분리하지만 이 두 가지를 함께 결합할 수 있다고 생각합니다. 둘 다 한정된 이름을 가지고 있지만 전자는 글로벌 한정을 갖고 있지 않은 반면 후자는 글로벌 한정을 가지고 있습니다.

① 접두사를 포함하는 정규화된 이름입니다. 이 접두사는 여러 개 또는 하나의 수준을 가질 수 있지만 가장 왼쪽은 전역 한정자가 될 수 없습니다. 이 경우 코드가 위치한 네임스페이스에 해당하는 데이터에 접두사 한정 이름이 추가됩니다. , 즉:

所处命名空间\前缀限定\名称来读取,如果该代码是全局没有命名空间的,则直接用前缀限定名称来读取,也就是:前缀限定\名称来读取。

实例代码:

<?php 
/*命名空间Col\Index*/ 
namespace Col\Index{ 
  const INSTANCE=1; 
} 
 
/*命名空间Index*/ 
namespace Index{ 
  const INSTANCE=2; 
} 
 
/*命名空间Col*/ 
namespace Col{ 
  const INSTANCE=3; 
  var_dump(Index\INSTANCE); //打印出来的是1 读取的是Col\Index\INSTANCE 
} 
 
/*全局非命名空间代码*/ 
namespace { 
  const INSTANCE=4; 
  var_dump(Index\INSTANCE); //打印出来的是2 读取的是Index\INSTANCE 
} 
 
?>
로그인 후 복사

②全局限定前缀名称:也就是在最左侧有全局操作符\进行修饰的前缀限定名称,当然也可以没有前缀限定直接全局操作符\加上名称也是可以的。但加上全局操作符后就跟目录里的绝对路径一样,只会按照全局限定后的所设置的进行读取。

具体实例如下:

<?php 
/*命名空间Col\Index*/ 
namespace Col\Index{ 
  const INSTANCE=1; 
} 
 
/*命名空间Index*/ 
namespace Index{ 
  const INSTANCE=2; 
} 
 
/*命名空间Col*/ 
namespace Col{ 
  const INSTANCE=3; 
  var_dump(\Index\INSTANCE); //打印出来的是2 读取的是Index\INSTANCE 
} 
 
/*全局非命名空间代码*/ 
namespace { 
  const INSTANCE=4; 
  var_dump(\Index\INSTANCE); //打印出来的是2 读取的是Index\INSTANCE 
} 
 
namespace Lin{ 
  const INSTANCE=5; 
  var_dump(\INSTANCE); //打印出来的是4 读取的是INSTANCE,是全局非命名空间里的INSTANCE,如果没有全局操作符\,读取的会是当前命名空间的Lin\INSTANCE=5 
} 
 
?>
로그인 후 복사

四:命名空间在字符串中的转义

有时候命名空间会放在字符串中使用,如果是单引号不会通过编译器解释,所以没有任何问题,但是如果是双引号,那么就会有些意外情况了,要知道双引号里的内容是需要经过编译器进行解释然后再进行输出的,而\在编译器里的解释容易造成歧义

例如"index\name"这里就有\n会被解释成换行,除此之外还有很多这种造成意外的情况。

因此一般我们推荐命名空间如果要放在字符串中使用,最好使用单引号,一是效率,二是安全,如果使用双引号,则必须增加一个\进行转义避免歧义,例如"index\\name"这样就没有问题了。

随手双引号的举个例子:

<?php 
/*全局非命名空间代码*/ 
namespace Index\Name{ 
  class foo{ 
    function construct(){ 
      echo 2; 
    } 
  } 
} 
 
namespace{ 
  $a= "Index\\Name\\foo"; //用\转义了\所以可以正常运行,但是如果去掉转义的话会报错Class 'Index\Nameoo',因为/f被解释成了换页符 
  $obj=new $a; 
}
로그인 후 복사

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Laravel实现密码重置步骤详解

php爬取天猫和淘宝商品数据步骤详解(附代码)

위 내용은 PHP 네임스페이스 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 데이터베이스 작업 CakePHP 데이터베이스 작업 Sep 10, 2024 pm 05:25 PM

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles