어떻게 PHP 핵심 특성 네 임 스페이스 를 이해 합 니까?
PHP 는 5.3 이후 구성 요소 간 의 이름 충돌 문 제 를 해결 하기 위해 네 임 스페이스 를 제 시 했 고 주로 파일 시스템 의 디자인 을 참고 했다.
네 임 스페이스 키 워드 를 사용 하여 네 임 스페이스 를 정의 합 니 다.그 중에서 최상 위 네 임 스페이스 는 보통 제조 업 체 이름 이 고 서로 다른 개발 자의 제조 업 체 네 임 스페이스 는 유일한 것 입 니 다.네 임 스페이스 는 파일 디 렉 터 리 와 일일이 대응 할 필요 가 없 지만 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 규범 에 따라 정의 및 사용 추천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 네 임 스페이스 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.