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

PHPz
풀어 주다: 2023-03-05 22:10:02
원래의
2734명이 탐색했습니다.

php 네임스페이스는 네임스페이스를 나타냅니다. 사용 방법: 먼저 PHP 샘플 파일을 만든 다음 "namespace MyProject;"를 통해 "MyProject" 네임스페이스에 코드를 정의합니다.

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

PHP 네임스페이스(namespace)

PHP 네임스페이스(namespace)는 PHP 5.3에서 추가되었습니다. C#과 Java를 공부했다면 네임스페이스는 새로운 것이 아닙니다. 그러나 이는 PHP에서 여전히 매우 중요한 의미를 갖습니다.

PHP 네임스페이스는 다음 두 가지 유형의 문제를 해결할 수 있습니다.

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

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

네임스페이스 정의

기본적으로 모든 상수, 클래스 및 함수 이름은 PHP가 네임스페이스를 지원하기 전과 마찬가지로 전역 공간에 배치됩니다.

네임스페이스는 키워드 네임스페이스로 선언됩니다. 파일에 네임스페이스가 포함되어 있으면 다른 모든 코드보다 먼저 네임스페이스를 선언해야 합니다. 구문 형식은 다음과 같습니다.

<?php  
// 定义代码在 &#39;MyProject&#39; 命名空间中  
namespace MyProject;  
  
// ... 代码 ...
로그인 후 복사

다음과 같이 동일한 파일에 서로 다른 네임스페이스 코드를 정의할 수도 있습니다.

<?php  
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>
로그인 후 복사

단일 파일에 여러 네임스페이스를 정의하는 데 이 구문을 사용하지 않는 것이 좋습니다. 다음 중괄호 형식의 구문을 사용하는 것이 좋습니다.

<?php
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>
로그인 후 복사

네임스페이스가 아닌 전역 코드를 네임스페이스 코드와 결합하려면 중괄호 구문만 사용할 수 있습니다. 전역 코드는 명명되지 않은 네임스페이스 문과 함께 중괄호로 묶어야 합니다. 예:

<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
로그인 후 복사

네임스페이스를 선언하기 전에 유효한 유일한 코드는 소스 파일이 인코딩되는 방법을 정의하는 선언 문입니다. 공백을 포함하여 PHP가 아닌 코드는 네임스페이스 선언 앞에 나타날 수 없습니다.

<?php
declare(encoding=&#39;UTF-8&#39;); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
로그인 후 복사

다음 코드는 구문 오류를 발생시킵니다.

<html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
로그인 후 복사

Subnamespace

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

<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */  }
?>
로그인 후 복사

위의 예에서는 상수 MyProjectSubLevelCONNECT_OK, MyProjectSubLevelConnection 클래스 및 MyProjectSubLevelConnect 함수를 만듭니다.

네임스페이스 사용법

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로 확인됩니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿