PHP 네임스페이스 사용에 대한 그래픽 튜토리얼(코드 포함)
这次给大家带来php命名空间使用图文教程(附代码),php命名空间使用的注意事项有哪些,下面就是实战案例,一起来看一下。
一:命名空间里的namespace关键字和NAMESPACE常量的运用
PHP支持两种抽象的访问当前命名空间内部元素的方法,NAMESPACE 魔术常量和namespace关键字。
常量NAMESPACE会储存当前命名空间的名字字符串,如果当前是全局非命名空间,则保存的是空字符串。
关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符。如果不在当前是全局环境的话,那么显式访问的就是全局限定的元素。
NAMESPACE实例:
<?php namespace Index\Name{ var_dump(NAMESPACE); //打印string(10) "Index\Name" function foo($classname){ return NAMESPACE.'\\'.$classname; } } namespace{ var_dump(NAMESPACE); //打印string(0) "" var_dump(Index\Name\foo('ceshi')); //打印string(16) "Index\Name\ceshi" } ?>
namespace实例:
<?php namespace Index\Name\Index{ function foo(){ return 2; } } namespace Index\Name{ var_dump(namespace\Index\foo()); //打印2 function foo(){ return 1; } } namespace{ var_dump(namespace\Index\Name\foo()); //打印1 } ?>
二:使用命名空间的别名/导入
命名空间具备允许别名导入以及导入的功能,命名空间导入需使用use关键字,如果还需要设置别名则需要use与as进行配合。
1)导入支持范围:
1:为类名称使用别名
2:为接口名称使用别名
3:为命名空间使用别名
4:5.6以上的php版本,允许函数或者常量使用别名。
2)别名/导入格式
导入格式:use [函数/常量] 命名空间完全限定名[类/接口/函数/常量]
别名导入格式:use [函数/常量] 命名空间完全限定名[类/接口/函数/常量] as 别名
注意:如果没有使用完全限定名的话,也和之前使用命名空间一样,会变成当前命名空间+限定名称来组合出完整的命名空间,所以如果不写完全限定名称,这里一定要多留意组合的结果是否是正确的命名空间。
导入实例:
<?php namespace Index\Col\Ads{ const INSTANCE='const_val'; function functionName(){ return 'function_val'; } class className{ static function classv(){ return 'class_val'; } } } namespace Col{ const INSTANCE='const_val_col'; function functionName(){ return 'function_val_col'; } class className{ static function classv(){ return 'class_val_col'; } } } namespace Index{ /*引入Index\Col\Ads命名空间*/ use \Index\Col\Ads; /*读取引入的命名空间的常量*/ echo \Index\Col\Ads\INSTANCE.'<br/>'; //打印class_val /*读取引入的命名空间的函数*/ echo \Index\Col\Ads\functionName().'<br/>'; //打印class_val /*读取引入的命名空间的类,接口也是一样的*/ echo \Index\Col\Ads\className::classv().'<br/>'; //打印class_val /*引入常量*/ use const \Col\INSTANCE; /*读取常量*/ echo INSTANCE.'<br/>'; //打印const_val_col /*引入函数*/ use function \Col\functionName; /*读取函数*/ echo functionName().'<br/>'; //打印function_val_col /*引入类或者接口*/ use \Col\className; /*读取类或者接口*/ echo className::classv().'<br/>'; //打印classname_val_col } ?>
以上的例子里Index的命名空间里写的是完全限定名,Index\Col\Ads如果没有前面的\全局操作符的话,就会变成Index\Index\Col\Ads的命名空间了,一定要注意。
别名导入实例:
<?php namespace Index\Col\Ads{ const INSTANCE='const_val'; const NS='namespace'; function functionName(){ return 'function_val'; } class className{ static function classv(){ return 'class_val'; } } } namespace{ /*引入Index\Col\Ads命名空间,并设置别名Ads*/ use Index\Col\Ads as Ads; /*引入Index\Col\Ads命名空间的常量INSTANCE,并设置别名con*/ use const Index\Col\Ads\INSTANCE as con; /*引入Index\Col\Ads命名空间的函数functionName,并设置别名func*/ use function Index\Col\Ads\functionName as func; /*引入Index\Col\Ads命名空间的类className,并设置别名classn,接口的别名设置方式和这个一样*/ use Index\Col\Ads\className as classn; echo Ads\NS.'<br/>'; //打印namespace echo con.'<br/>'; //打印const_val echo func().'<br/>'; //打印function_val echo classn::classv().'<br/>'; //打印class_val } ?>
这个例子里是全局的非命名空间,所以没有全局操作符也不会影响导入的命名空间。
三:特别补充
1:命名空间首字符不能是数字,必须是字母或者是下划线,否则会报出farse error。
2:define在命名空间内设置的常量默认是全局的(例外:一个文件内多个命名空间用括号包起来的方式define默认设置的是该命名空间的常量),所以如果需要命名空间下的常量,需要特别写明在常量名称里,例如define('Index\CON','CON')和define(NAMESPACE.'\CON','CON')这两种方式都是设置命名空间下的常量CON。
常量实例:
<?php namespace Col; /*define默认设置的是全局的常量*/ define('CON','globals'); /*特别声明设立的是当前命名空间下的常量*/ define(NAMESPACE.'\CON','col'); /*特别声明设立的是Index命名空间下的常量*/ define('Index\CON','index'); /*全局操作符后直接跟常量名,所以获取到的是全局的常量CON*/ var_dump(\CON); //globals /*没有任何限定,所以获取的是当前命名空间的常量CON*/ var_dump(CON); //col /*全局限定,读取其对应的Col命名空间的常量CON*/ var_dump(\Col\CON); //col /*全局限定,读取其对应的Index命名空间的常量CON*/ var_dump(\Index\CON); //index ?>
3:看到上面的实例,推及到函数及类(接口)就不一样了,在命名空间里设置的函数及类(接口)都是属于该命名空间的内容,不管是不是一个文件多个命名空间大括号里设置的。
函数和类的实例:可以看出在命名空间内的函数和类是属于命名空间的
index.php
<?php function foo(){ return 'global'; } class fool{ static function ceshi(){ return 'global'; } } ?>
col.php
<?php namespace Col; require './index.php'; //如果不引入index.php文件,那么下面的\foo()和\foo::ceshi()都会报fatal error function foo(){ return 1; } class fool{ static function ceshi(){ return 2; } } var_dump(\foo()); //global var_dump(foo()); //打印1 var_dump(\Col\foo()); //打印1 var_dump(\fool::ceshi()); //global var_dump(fool::ceshi()); //打印2 var_dump(\Col\fool::ceshi()); //打印2 ?>
4:设置命名空间的时候,要注意不要使用php的关键字,例如function、class、abstract之类的,否则会报出parse error。
5:同一个命名空间,不同文件间的使用无须带上命名空间,直接使用函数、常量、类及接口就可以了。
6:一个命名空间的类、常量、接口、函数单独引入另一个命名空间,其中函数、常量、类、接口如果发生了冲突,如果没有用限定词则优先使用单独引入类、常量、接口、函数。
实例:
indext.php
<?php namespace Lic; define(NAMESPACE.'\CON',1); function func(){ echo 1; } class foo{ static function ceshi(){ return 1; } }
只引入命名空间
<?php namespace Col; require './indext.php'; use \Lic; define(NAMESPACE.'\CON',2); //设定命名空间的常量必须写明命名空间,否则是全局的常量 function func(){ echo 2; } class foo{ static function ceshi(){ return 2; } } var_dump(CON); //打印2 var_dump(namespace\CON); //打印2 func(); //打印2 namespace\func(); //打印2 var_dump(foo::ceshi()); //打印2 var_dump(namespace\foo::ceshi()); //打印2
如果单独引入类、接口、函数、常量的情况,名称冲突且没有用限定的话优先使用引入的:
<?php namespace Col; require './indext.php'; use \Lic\foo; use function \Lic\func; use const \Lic\CON; define(NAMESPACE.'\CON',2); //设定命名空间的常量必须写明命名空间,否则是全局的常量 function func(){ echo 2; } class foo{ static function ceshi(){ return 2; } } var_dump(CON); //打印1 var_dump(namespace\CON); //打印2 func(); //打印1 namespace\func(); //打印2 var_dump(foo::ceshi()); //打印1 var_dump(namespace\foo::ceshi()); //打印2
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 PHP 네임스페이스 사용에 대한 그래픽 튜토리얼(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

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

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.
