>  기사  >  백엔드 개발  >  PHP 네임스페이스 사용의 기본 사항

PHP 네임스페이스 사용의 기본 사항

伊谢尔伦
伊谢尔伦원래의
2016-11-23 10:57:061078검색

네임스페이스 사용 방법을 논의하기 전에 PHP가 사용할 네임스페이스 요소를 어떻게 아는지 이해해야 합니다. PHP 네임스페이스와 파일 시스템을 간단하게 비유할 수 있습니다. 파일 시스템의 파일에 액세스하는 방법에는 세 가지가 있습니다.

foo.txt와 같은 상대 파일 이름 형식. currentdirectory/foo.txt로 구문 분석됩니다. 여기서 currentdirectory는 현재 디렉터리를 나타냅니다. 따라서 현재 디렉터리가 /home/foo이면 파일 이름은 /home/foo/foo.txt로 확인됩니다.

상대 경로 이름 형식은 하위 디렉터리/foo.txt와 같습니다. currentdirectory/subdirectory/foo.txt로 구문 분석됩니다.

절대 경로 이름은 /main/foo.txt 형식입니다. 이는 /main/foo.txt로 구문 분석됩니다.

PHP 네임스페이스의 요소는 동일한 원칙을 사용합니다. 예를 들어, 클래스 이름은

정규화되지 않은 이름 또는 $a=new foo() 또는 foo::staticmethod();와 같은 접두사가 없는 클래스 이름의 세 가지 방법으로 참조될 수 있습니다. 현재 네임스페이스가 currentnamespace이면 foo는 currentnamespacefoo로 확인됩니다. foo를 사용하는 코드가 전역 코드이고 어떤 네임스페이스에도 코드를 포함하지 않는 경우 foo는 foo로 확인됩니다. 경고: 네임스페이스의 함수 또는 상수가 정의되지 않은 경우 정규화되지 않은 함수 또는 상수 이름은 전역 함수 또는 상수 이름으로 확인됩니다.

정규화된 이름 또는 $a = new subnamespacefoo() 또는 subnamespacefoo::staticmethod();와 같은 접두사가 포함된 이름입니다. 현재 네임스페이스가 currentnamespace이면 foo는 currentnamespacesubnamespacefoo로 확인됩니다. foo를 사용하는 코드가 전역 코드인 경우, 어떤 네임스페이스에도 포함되지 않은 코드인 foo는 subnamespacefoo로 확인됩니다.

정규화된 이름 또는 전역 접두사 연산자가 포함된 이름(예: $a = new currentnamespacefoo(); 또는 currentnamespacefoo::staticmethod();). 이 경우 foo는 항상 코드에서 리터럴 이름 currentnamespacefoo로 확인됩니다.

다음은 이 세 가지 방법을 사용한 예입니다.

file1.php:

<?php
    namespace Foo\Bar\subnamespace;
    const FOO = 1;
    function foo() {}
    class foo
    {
        static function staticmethod() {}
    }
?>

file2.php:

<?php
    namespace Foo\Bar;
    include &#39;file1.php&#39;;
    const FOO = 2;
    function foo() {}
    class foo
    {
        static function staticmethod() {}
    }
    /* 非限定名称 */
    foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo
    foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。
    echo FOO; // resolves to constant Foo\Bar\FOO
    /* 限定名称 */
    subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
    subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,以及类的方法 staticmethod
    echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
    /* 完全限定名称 */
    \Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
    \Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
    echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
?>

참고 전역 클래스, 함수 또는 상수에 액세스하려면 strlen(), Exception 또는 INI_ALL과 같은 정규화된 이름을 사용할 수 있습니다.

예제 #1 네임스페이스 내의 전역 클래스, 함수 및 상수에 액세스

<?php
    namespace Foo;
    function strlen() {}
    const INI_ALL = 3;
    class Exception {}
    $a = \strlen(&#39;hi&#39;); // 调用全局函数strlen
    $b = \INI_ALL; // 访问全局常量 INI_ALL
    $c = new \Exception(&#39;error&#39;); // 实例化全局类 Exception
?>


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