PHP命名空间

命名空间用来解决两类问题:

    用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突

    为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性

任意PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响:类(包括抽象类和traits)、接口、函数和常量。

专业词解释

非限定名称(Unqualified name) 名称中不包含命名空间分隔符(\)的标识符,例如 Foo

限定名称(Qualified name) 名称中含有命名空间分隔符的标识符(\),例如 Foo\Bar

完全限定名称(Fully qualified name) 名称以命名空间分隔符开始的标识符(\),例如 \Foo\Bar。 namespace\Foo 也是一个完全限定名称(注意namespace是个关键字)。

个人理解:

将命名空间等价为linux系统的文件路径

你当前命名空间是space.那么就相当于你在目录space下进行操作,你要使用这个空间下的如果space\test 的方法 fun(), 那么就是test\fun();系统会自动完善为space\test\func();

所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:

11005865-b5e055f6495170d9.png

11005865-e7125c8e50e272f4.png

定义子命名空间

 PHP命名空间也允许指定层次化的命名空间的名称:eg :  namespace MyProject\Sub\Level;

在同一个文件中定义多个命名空间(不推荐使用)

11005865-e50d50de4b25d4b6.png

方式1

11005865-68a46ac1e20c1221.png

 

命名空间和动态语言特征

11005865-93ed7f5dbe74dac9.png

同理函数和常量

 

11005865-21721907bfae7ff2.png

__NAMESPACE__常量

可以获得当前的命名空间名称

11005865-91417182be3ba7b8.png

使用命名空间:别名/导入

 

11005865-8bef237333198e28.png

注意对命名空间中的名称,前导的反斜杠是不必要的也不推荐的,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。

  为了简化操作,PHP还支持在一行中使用多个use语句

 

全局空间

11005865-50d902daed4a8bfd.png

使用命名空间:后备全局函数/常量

11005865-5b817d3a199df713.png

对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP会退而使用全局空间中的函数或常量.

对于类如果没有找到则会报错.不会去使用全局空间中的类

参考:

PHP: 命名空间 - Manual

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值