PHP中的namespace、use与require

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

 

a.php

<?php
//namespace think;
class a {
    public function a2()
    {
        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了文件的。
 
 

 

 

 

 
posted @   少吃饭多读书  阅读(585)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示