>  기사  >  백엔드 개발  >  PHP 커널-네임스페이스 팁 공유

PHP 커널-네임스페이스 팁 공유

黄舟
黄舟원래의
2017-03-09 09:38:591327검색

위키피디아에서 네임스페이스의 정의는 다음과 같습니다. 네임스페이스(영어: Namespace)는 식별자(식별자) 컨텍스트를 의미합니다. (컨텍스트) .

식별자는 여러 네임스페이스에서 정의될 수 있으며, 다른 네임스페이스에서의 의미는 부적합합니다. 프로그래밍 언어에서 네임스페이스는 해당 범위 내의 식별자를 포함하고 그 자체가 식별자로 표시되는 특수 범위이므로 논리적으로 관련된 일련의 식별자가 식별자로 구성됩니다. 함수 및 클래스 범위는 가시성, 접근성 및 개체 수명과 불가분하게 연결되어 있는 암시적 네임스페이스로 생각할 수 있습니다.


네임스페이스는 사물을 캡슐화하는 방법으로 볼 수 있으며, 글쓰기도 볼 수 있습니다. 이는 코드 구조를 구성하는 형태입니다. 이 추상적인 개념과 구성 형태는 여러 언어에서 볼 수 있습니다. PHP에서 네임스페이스는 클래스 라이브러리나 애플리케이션을 작성할 때 클래스나 함수와 같은 재사용 가능한 코드를 작성할 때 발생하는 두 가지 유형의 문제를 해결하는 데 사용됩니다.

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

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


PHP는 버전 5.3.0부터 네임스페이스 기능을 지원합니다. 네임스페이스 정의 및 사용 예를 살펴보세요.


<?php
namespace tipi;
class Exception {
    public static $var = &#39;think in php internal&#39;;
}
 
const E_ALL = "E_ALL IN Tipi";
 
function strlen(){
    echo &#39;strlen in tipi&#39;;
}
 
echo Exception::$var;
echo strlen(Exception::$var);

1. 예 :



2. 네임스페이스 정의


3. 공간 활용

함수 호출을 예로 들어 보겠습니다. 함수를 호출해야 하는 경우 zend_do_begin_function_call 함수가 호출됩니다. 이 함수에서는 네임스페이스를 사용할 때 함수명을 확인하는데, 호출되는 함수는 zend_resolve_non_class_name이다. zend_resolve_non_class_name 함수에서는 유형에 따라 판단이 이루어지고 관련 결과가 반환됩니다.

1.완전한 이름 기능: 프로그램은 먼저 첫 번째 문자가 ""인지 여부에 따라 판단합니다. 구문 분석 중에 직접 반환됩니다. 예를 들어 strlen으로 시작하는 전역 호출 또는 이전에 정의한 TipiException과 유사한 호출이 있습니다.

2.모든 비수식 이름 및 수식 이름(비정규 이름) : 현재 가져오기 규칙 프로그램을 기반으로 별칭인지 여부를 확인합니다. , 컴파일 중에 별칭이 저장되는 HashTable에서 해당 네임스페이스 이름을 가져와 기존 함수 이름과 병합합니다. 별칭의 저장 및 생성은 다음 내용에서 설명됩니다.

3.네임스페이스 내부: 가져오기 없이 모두 정규화된 이름 규칙 변환 앞에는 현재 네임스페이스 이름이 옵니다. 마지막으로 현재 네임스페이스에 있는지 판단하면 결국 프로그램은 네임스페이스를 병합하는 함수 이름을 반환하게 됩니다.

4. 별칭/가져오기

별칭으로 참조 또는 가져오기 허용 외부 정규화된 이름은 네임스페이스의 중요한 기능입니다.

이는 Unix 계열 파일 시스템에서 다른 파일이나 디렉터리에 대한 심볼릭 링크를 만드는 방법과 다소 유사합니다. PHP 네임스페이스 지원 별칭이나 가져오기를 사용하는 방법에는 클래스 이름에 별칭을 사용하거나 네임스페이스 이름에 별칭을 사용하는 두 가지 방법이 있습니다.


위 내용은 PHP 커널-네임스페이스 팁 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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