题记:由于php语言是弱类型的语言所以定义起来很随意尤其是在类名上,由于类名可以跟文件名不同,所以不同的文件引入的可能是同一个命名方式的class所以就会爆炸!!!!!php没有包的概念
include就等于帮其他文件中的code全部粘贴过来,所以很坑爹。
php命名规范显得格外的重要,为了避免以上的惨剧发生,php提供了两个机制include_once /require_once(已经加载的文件内容不再加载),但如果确实有需要两个class重复(说的有点违心,作为程序员就算class重复,我也会把它改成不重复,重复的class太麻烦了,后期难免会出问题)
所谓命名空间就是namespace 空间名;例如下图1.0:我定义了空间名为foo现在我把10.php下图1.1引入进来,现在就来问题了同样的class Human 怎么区分呢,没关系,命名空间是这样解决的我想访问10.php中的内容就$lihua=new \Foo\Bar\Human; 我想访问当前文件下的Human 正常new就行,当然也可以$lihua=new \Foo \Human;这样搞
那么如何访问没有定义命名空间的class呢? 命名空间如果没有定义的话默认是根目录下的命名空间
也就是说我想要访问human的话 必须要$a=new\Human (在命名空间下new必须要这样)
但是这样写实在太丑了(为了安全我全部用完全限定名称,其他的不做说明),php提供了use关键词,phper new对象或者使用函数的时候可以把可以把命名空间写到前面但是一定要具体到class或者函数,否则报错,具体写法如下图2所示:
接下来世界重回正轨 又可以 $a =new Human();了 注意一次引入多个命名空间,需要考虑引入的命名空间是否有重复的class或者函数,否则又TMD尴尬了,如果有且一定要让他存在我还是建议你用$lihua=new \Foo \Human吧~~~~~~~~