PHP命令空间namespace及use的用法

使用namespace的目的:

团队合作项目时,避免与团队其它成员新建的类发生冲突;个人负责项目时,避免前后新建的类发生冲突;

据个人理解,用到所需要的类时,需要先require或include引入,所以会发生类重定义的错误的前提是:两个相同命名的类都有被引入。目前有些php框架会自动加载(即include)所有新建的model类,所以为了避免你新建的model类和项目框架原生的核心类发生重名冲突,采用了namespace。(想了想,与团队成员新建的类产生冲突应该通过沟通避免,即使事发后也应该重新调整类名即时维护,避免后期造成因为对类的理解混淆而带来维护上的复杂度提高)

 

namespace的使用方法:

1.namespace后命名的定义不区分大小写

2、一个PHP文件客房多个命名空间,第一个命名空间前不能有代码;namespace建议用类名

3. 没有定义命名空间,就理解为使用顶级命名空间。new类时,可以在类前加上反斜杠\,也可以不加。

4、在当前的namespace,会默认加上它的名称;在最前面加"\"就除外

5、类在指定命名空间下,new类时,一定要要带上指定的命苦空间;没有带上指定的命名空间,php就会从顶级命名空间里找这个类

切记:这里不能按照顶级命名空间包含一切其它的命名空间来理解。而应该将顶级命名空间完完全全与其他命名空间区分开。

例子如下:

Anlis.php

<?php
namespace one;
class Animal{
    function __construct()
    {
        echo "我的命名空间叫one!<br>";
    }
}

new Animal();
//new \Animal();//C:\phpStudy\PHPTutorial\WWW\test\yidian\namespace\ anli .php中没有找到“Animal”类,这是因为顶级命名空间和其它的命名空间是分开的
namespace test;
class Person{
function __construct()
{
echo "我的命名空间叫test2!<br>";
}
}

namespace two;
class Person{ function __construct() { echo "我的命名空间叫Person!<br>"; } }

// new类时,带上命名空间时,之间一定用反斜杠字符;前面也要加“\”,如果不加最前面默认加上当前命名空间“two”,报错 new \one\Animal(); //new \Animal(); //代码报错:C:\phpStudy\PHPTutorial\WWW\test\yidian\namespace\ anli .php中没有找到Class 'Animal' new \test\Person();//指定的命名空间,输出"我的命名空间test2!" new Person();//默认加上当前的two

 

 

使用use的目的:

在命名空间字符串过长时,使用use可以相应的缩短命名空间。

 

use的使用方法:

1、new类时,最前面无需用反斜杠。此外,use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。

2、use可以有别名,也可以直接用类名

注:在当前namespace,use不能同名,必须用as,否则报错

use one\Animal;//默认Animal类名
new Animal();
use test\Person as b;//使用别名
new b;

 总结:

1、namespace就是划分领域的作用,代表这些东西是属于某个命名空间下的。

2、use就是起小名的作用,不论写起来还是说起来都可以省不少事儿。

 

转载于:https://www.cnblogs.com/bushui/p/11486689.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值