php命名空间

一个文件需要包含多个类,加载几个类,那么类可能出现重名的情况,PHP不允许类出现重名的情况

早期的时候,可能是给类加上前缀来控制,用这种方式来进行区分,为了让它不跟其他类有冲突

后期PHP提供了命名空间,是为了帮助解决这种问题而产生的

文件系统中会把同名的用不同的文件夹隔离起来,命名空间就是类似的

就是说你用别人的类,可能与你自己的有冲突,只要使用命名空间,比如ali命名空间,就可以跟他避免开了,所以使用第三方的时候,也不用担心,因为他们都有命名空间,命名空间就相当于文件夹

使用命名空间后,再直接使用类名就会报错

namespace App;
或者namespace App;
也可以namespace App\Controller;
class User{}

User::test();//会报错
App\User::test();

也可以在命名空间放函数

namespace Helper;
function show(){}

Helper\show();


namespace App;
include 'Common.php';
include 'Order.php';//命名空间App\Controller

App\Controller::make();//会报错,因为它依据的是App命名空间为根目录
Controller::make();//正确

Common\Comment::make();//会报错,因为它依据的是App命名空间为根目录
\Common\Comment::make();

include ‘helper.php’;//里面有一个全局函数show
function show(){
echo “app show”;
}
show();//会输出app show,因为当前文件有这个函数,就不会去包含文件里找了

常量
define不受命名空间的影响
const WEB = 'web.com';//跟函数一样,在当前找不到才会去包含文件去找
const受到命名空间的影响


命名空间关键字
在命名空间App中,可以\App\Controleler\User::make();
也可以namespace \Controller\User::make();
namespace就是指当前命名空间

$class = __NAMESPACE__.'\\Controller\User';
$class::make();


include 'Module/Shop/Controller/User.php';//这个文件的命名空间是App\Module\Shop\Controler

Module\Shop\Controller\User::make();//每次都要这么写是不是很麻烦,每次都要写这么长

可以使用
use App\Module\Shop\Controller\User;//当使用User类时,用这个命名空间,user可以写include前
User::make();

如果是
use App\Module\Shop\Controller;
User::make();//会报错,因为会去App里面找
需要
Controller\User::make();

所以一般use都要带上类名

多个类的引入
use App\Module\Shop\Service\Pay;
或者
use App\Module\Shop\Controller\User,App\Module\Shop\Service\Pay;


引入冲突
如果在service命名空间里,还有一个User类
```php
use App\Module\Shop\Controller\User as UserServer;
use App\Module\Shop\Service\User;
UserServer::make();
User::make();

echo METHOD;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值