2、引入
引入命名空间使用关键字use
,可以通过多个use
在一个文件中引入多个命名空间:
use example; use example\test\demo;
需要使用到哪个命名空间的类和方法,则use哪个命名空间,前提是这些命名空间的实际文件地址已经包含进来了,或者说能实现自动的类加载了。
3、实例化
在程序中实例化并使用某个命名空间下的类方法,同样使用new关键字进行实例化,但是需要在类名前面加上命名空间前缀。
例如:
$class = new example\a();//实例化example命名空间下的a类 $class = new example\test\demo\b(); //实例化example\test\demo命名空间下的b类
如果在文件前面已经引入了这些命名空间,则可以不需要类的前缀:
use example; use example\test\demo; $class = new a();//实例化example命名空间下的a类 $class = new b(); //实例化example\test\demo命名空间下的b类
注:如果use的时候是use example\test;
则在实例化b类时要带上相对命名空间路径(注意不是实际文件路径),即new demo\b();
当然所有的实例化都可以直接使用绝对路径形式,即在命名空间前面加\字符,如new \example\test\demo\b();
这样就采用了绝对路径形式实例化了b类。
4、别名
在用namespace定义命名空间的时候,为了避免之后引用的时候命名空间过长,可以在定义时采用as关键字为一个命名空间指定别名
namespace example\test\demo as testDemo;
这样在之后引用或实例化的时候就可以new testDemo\<类名>();
三、基于PSR4的命名空间规范
由于方法、类在不同项目中命名空间定义不一致,第三方类库的命名空间也定义不一致,所以相关php组织出台了一套约定俗成的规范,即PSR4规范,
用来规范命名空间的定义规则。
具体规范如下:
1. 一个完整的类名需具有以下结构:
\<命名空间>(\<子命名空间>)*\<类名>
1. 完整的类名 必须 要有一个顶级命名空间,被称为 "vendor namespace";
2. 完整的类名 可以 有一个或多个子命名空间;
3. 完整的类名 必须 有一个最终的类名;
4. 完整的类名中任意一部分中的下滑线都是没有特殊含义的;
5. 完整的类名 可以 由任意大小写字母组成;
6. 所有类名都 必须 是大小写敏感的。