이 글은 주로 PHP 명령 공간 네임스페이스 사용법과 사용법에 대한 실제적인 요약을 소개합니다. 필요한 친구들이 참고할 수 있습니다.
네임스페이스의 가장 명확한 목적 중 하나는 두 가지 함수 또는 클래스 이름이 중복되는 문제를 해결하는 것입니다. PHP 이름이 동일할 수 없습니다. 그렇지 않으면 치명적인 오류가 발생합니다. 이런 경우에는 이름 중복만 피하면 해결이 됩니다. 가장 일반적인 방법은 접두사에 동의하는 것입니다.
네임스페이스 사용 목적:
팀 프로젝트를 진행할 때 다른 팀 구성원이 만든 새 클래스와의 충돌을 피하세요. 개인이 프로젝트를 담당할 때는 이전과 이후에 만든 새 클래스와의 충돌을 피하세요.
개인적인 이해에 따르면 필수 클래스를 require 또는 include로 먼저 도입해야 하므로 클래스 재정의 오류가 발생하기 위한 전제 조건은 동일한 이름의 두 클래스가 도입되어야 한다는 것입니다. 현재 일부 PHP 프레임워크는 새로 생성된 모든 모델 클래스를 자동으로 로드(즉, 포함)하므로 새 모델 클래스와 프로젝트 프레임워크의 기본 핵심 클래스 간의 이름 충돌을 피하기 위해 네임스페이스가 사용됩니다. (생각해 본 후, 팀원들이 새로 만든 클래스와의 충돌은 소통을 통해 피해야 한다. 사고가 발생한 후에도 클래스 이름을 즉시 재조정하고 유지 관리하여 나중에 클래스에 대한 이해의 혼란으로 인한 유지 관리 복잡성이 가중되는 것을 방지해야 한다. ) 사용 방법을 결합하여 목적을 더 잘 이해했습니다.네임스페이스 사용 방법:
테스트를 위해 1.php와 name.php라는 3개의 파일을 생성합니다(이 파일은 테스트를 수행하는 데 사용됩니다). 나중에 설명하지 않겠습니다. 코드 자체가 변경됩니다.1. 네임스페이스 뒤의 이름 정의는 대소문자를 구분하지 않습니다.
네임스페이스 1; (다음 코드에서는 첫 번째 테스트 방법을 사용하겠습니다.)
2. 정의된 네임스페이스가 없으면 최상위 네임스페이스를 사용하는 것으로 이해됩니다. 새 클래스를 만들 때 클래스 앞에 백슬래시를 추가할지 여부를 지정할 수 있습니다.
//1.php class Person{ function __construct(){ echo 'I am one!'; } } //name.php require_once './1.php'; new Person(); //输出 I am one!; new \Person(); //输出 I am one!;
3. 새 클래스를 추가할 때 네임스페이스를 가져올 때 슬래시 대신 백슬래시 문자를 사용해야 합니다.
메모리 방식: %에서 슬래시를 찾는 순서에 따라 슬래시로 해석합니다. (가끔 백슬래시라고 하면 어느 방향인지도 모르겠습니다. 예전에는 왼쪽에서 오른쪽으로 올라가는 방향으로 기억했는데 지금은 너무 믿음직스럽지 못한 것 같아요)//name.php require_once './1.php'; new /Person(); // 代码报错:Parse error: syntax error, unexpected '/'
4. 카테고리는 다음과 같습니다. 네임스페이스에 새 클래스를 지정할 때 지정된 네임스페이스가 포함되어야 합니다.
지정된 네임스페이스가 없습니다. 2번 항목에 따르면 PHP는 최상위 네임스페이스에서 이 클래스를 찾습니다. 기억하세요: 최상위 네임스페이스에는 다른 모든 네임스페이스가 포함되어 있으므로 이는 이해될 수 없습니다. 대신 최상위 네임스페이스는 다른 네임스페이스와 완전히 분리되어야 합니다.//1.php namespace one; class Person{ function __construct(){ echo 'I am one!'; } } //name.php require_once './1.php'; new \one\Person(); //输出 I am one!; new \Person(); //代码报错:Fatal error: Class 'Person' not found
5. 네임스페이스 선언 뒤의 코드는 이 네임스페이스에 속하므로 include나 require가 있어도 영향을 받지 않습니다. (문장의 후반부에 대한 이해가 중요합니다. 자세한 내용은 코드를 참조하세요.) .
//1.php namespace one; class Person{ function __construct(){ echo 'I am one!'; } } //name.php namespace test; require './1.php'; new \one\Person(); //输出 I am one!; new Person(); //这里结果会是什么呢,猜猜看
Fatal error: Class 'test\Person' not found
new \Person();
Fatal error: Class 'Person' not found
//name.php namespace test; require './1.php'; class Person{ function __construct(){ echo 'I am test!'; } } new \one\Person(); //输出 I am one!; new Person(); //这里结果会是什么,自己猜猜看
//name.php namespace test; namespace one; class Person{ function __construct(){ echo 'I am one!'; } } class Person{ function __construct(){ echo 'I am test!'; } }
//name.php namespace test\person; class Person{ function __construct(){ echo 'I am test!'; } }new \test\person\Person(); //命名空间里person无法代表类名
只说第一个命名空间前不能有任何代码,之后的命名空间之前可以有代码。这个自行测试即可。
//name.php namespace test; echo 'zhai14'; namespace zhai; require './1.php';
php命名空间namespace告一段落了,接下来说说use的用途。
使用use的目的:
在命名空间字符串过长时,使用use可以相应的缩短命名空间。
use的使用方法:
1.new类时,最前面无需用反斜杠。此外,use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。
//name.php namespace animal\dog; class Life{ function __construct(){ echo 'dog life!'; } } namespace animal\cat; class Life{ function __construct(){ echo 'cat life!'; } } new Life(); //按照代码执行顺序,这里默认animal\cat这个命名空间 new \animal\dog\Life(); //A use animal\dog; //a new dog\Life(); //B use animal\dog as d; //b new d\Life();
通过A、B行代码比较,需要注意:
使用use后,new类时,最前面没有反斜杠。
没使用use时,命名空间最前面有反斜杠
通过a、b行代码比较,可以理解:
use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。如上的:
use animal\dog;
相当于
use animal\dog as dog;
2.namespace后面不建议加类名,但use后可以。
//name.php namespace animal\dog; class Life{ function __construct(){ echo 'dog life!'; } } namespace animal\cat; class Life{ function __construct(){ echo 'cat life!'; } } use animal\dog\Life as dog; new dog();
如上所示,use后加上类名后,就相当于把类改了个名称:由Life改为dog了。
上面不用as dog就会报错:
Fatal error: Cannot use animal\dog\Life as Life because the name is already in use
因为cat下也有个一样名称的Life类。
可以理解为,使用use后,这个昵称对应的类只能归当前命名空间占有,其它命名空间下不允许存在该类。
//name.php namespace animal\dog; class Life{ function __construct(){ echo 'dog life!'; } } class Dog{ function __construct(){ echo 'dog in dog!'; } } namespace animal\cat; // class Dog{ // function __construct(){ // echo 'dog in cat!'; // } // } class Life{ function __construct(){ echo 'cat life!'; } } use animal\dog; new dog\Dog();
如上,使用了
use animal\dog;
cat
通过上面代码,我想使用use的目的效果(缩短命名空间名称)就很明显了。
简单总结一下:
namespace就是划分领域的作用,代表这些东西是属于某个命名空间下的。
use就是起小名的作用,不论写起来还是说起来都可以省不少事儿。
위 내용은 PHP 명령 공간 네임스페이스 사용법 및 사용(예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!