이번에는 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('MESSAGE','hello world'); ?>
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中文网其它相关文章!
推荐阅读:
위 내용은 PHP 네임스페이스 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

PHP에서 전처리 문과 PDO를 사용하면 SQL 주입 공격을 효과적으로 방지 할 수 있습니다. 1) PDO를 사용하여 데이터베이스에 연결하고 오류 모드를 설정하십시오. 2) 준비 방법을 통해 전처리 명세서를 작성하고 자리 표시자를 사용하여 데이터를 전달하고 방법을 실행하십시오. 3) 쿼리 결과를 처리하고 코드의 보안 및 성능을 보장합니다.

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

PHP를 사용하면 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다. 1) HTML을 포함하여 컨텐츠를 동적으로 생성하고 사용자 입력 또는 데이터베이스 데이터를 기반으로 실시간으로 표시합니다. 2) 프로세스 양식 제출 및 동적 출력을 생성하여 htmlspecialchars를 사용하여 XSS를 방지합니다. 3) MySQL을 사용하여 사용자 등록 시스템을 작성하고 Password_Hash 및 전처리 명세서를 사용하여 보안을 향상시킵니다. 이러한 기술을 마스터하면 웹 개발의 효율성이 향상됩니다.

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP는 여전히 역동적이며 현대 프로그래밍 분야에서 여전히 중요한 위치를 차지하고 있습니다. 1) PHP의 단순성과 강력한 커뮤니티 지원으로 인해 웹 개발에 널리 사용됩니다. 2) 유연성과 안정성은 웹 양식, 데이터베이스 작업 및 파일 처리를 처리하는 데 탁월합니다. 3) PHP는 지속적으로 발전하고 최적화하며 초보자 및 숙련 된 개발자에게 적합합니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

WebStorm Mac 버전
유용한 JavaScript 개발 도구
