景:通常用include包含文件的时候,包含的文件中包含同名的类(包括trait)、接口、函数、常量,比如下面的例子:
运行C.php会出错,因为在同一个文件中包含了相同的类名的类
使用命名空间的意义:可以理解为--->使用类似文件系统分级的形式,在定义类或者函数的时候,指定该类或者该函数所在的文件目录即可
按照上面的理解,先假设有一个类名为Test的类在dir1目录下,另外一个类名也为Test的类在dir2目录下,然后我们在使用其中dir1下的Test类的时候,在类名前面要加上dir1,以dir1\Test的形式实例化;同样,如果要使用dir2下的Test类的时候,就在类名前加上dir2,以dir2\Test的形式实例化。
上面的dir1或dir2就是PHP中的命名空间,命名空间的层级结构(方便理解的话,可以理解为层级结构)使用反斜线(\),也就是windows下的文件系统的分隔符来分隔。
上面的例子代码如下:
这样运行C.php就不会出错了,因为两个同名的类存在不同的命名空间,所以不会产生冲突
到这里,其实命名空间的原理已经讲清楚了。但是每次实例画一个类的时候,都写那么一长串命名空间,比较麻烦,所以可以使用关键字use,在实例画一个类的之前,先使用use将这个类的完整命名空间及类型指明,然后就可以直接使用类名实例化对象了。比如下面的例子