PHP中的namespace、use与require
namespace(命名空间):其实就是声明了空间,主要作用是防止在引入.php文件的时候防止.php内部的类/函数/常量或第三方类/函数/常量之间的名字冲突,如果引用了重复类名会导致报错。如下图:


a.php
<?php //namespace think; class a { public function a() { echo 'a'; } }
b.php
<?php //namespace think; //use think\a; require_once './22/a.php'; require_once 'a.php'; //use think2\a as a2; class b { public function b2(){ $a = new a; $a->a2(); echo 'b'; } } $c = new b(); $c->b2();如上代码,require_once了两个内容一样的php文件,里面有相同的类a,当两个类重复的时候PHP会报错。 use:use关键字与文件加载没有一点关系,use关键字的作用就是声明要使用的类所处那个命名空间之下(而且方便了对象的实例化)。注:在使用traits的时候也会只用use来继承traits 例如下图,new \think\a实例化a的时候需要加上命名空间think,如果不加的话需要将b.php第三行的注释解开。而且如果两个a.php中有一个使用了命名空间的话require_once 同样拥有类名的文件不会报错。


require:作用是要引进所需要的文件,文件的位置与命名空间无关,要使用绝对位置或者相对位置。 总结:其实说白了就是require引入了文件(require是根本),然后namespace是为了防止类名重复而导致php报错,use这是为了让对象声明更加的简洁代码更加优雅而存在的属于是锦上添花的类型。 至于Thinkphp5.0中类似下图的做法看似没有require到文件,实际上是框架已经require了文件的。


(17条消息) 详解spl_autoload_register()函数_pengmingdong的博客-CSDN博客_spl_autoload_register