php的命名空间

有效:命名空间对类(抽象,接口,traits),函数,const常量有效

定义(开头的反斜杠是绝对禁止的):namespace a[\b][\c][\...][{命名空间内php代码段...}|;]
-必须在所有php代码之前,可以在注释之后,因为注释不是php代码
-所有非php代码,包括空格,都不能出现在定义之前,<?php namespace xxx;之前不能有东西
-同一个命名空间,可以放在多个文件中
-同一个文件,也可以放置多个相同或不同的命名空间,第一个定义仍然遵循定义规则
-要将非命名空间代码和命名空间代码放置在一个文件内,必须采用如下方式
<?php
    namespace a {
        ...
    }
    namespace {
        ...
    }
?>

调用方式:
-非限定名称(就像没有用命名空间那样使用)
-限定名称(没有反斜杠"\"打头,与完全限定名称对应)
-完全限定名称

反斜杠开头的调用:
-反斜杠"\"的使用,其实是为了区分某命名空间xxx下,某限定名称调用
-到底是"绝对调用"还是相对当前xxx命名空间的"相对调用"
-所以,如果在非命名空间中,反斜杠"\"是可有可无的
-所以,只有在命名空间中的完全限定名称调用下,此反斜杠"\"才是必须的
-自动加载时,带入的类名参数,都是"绝对名称",所以自动省略了反斜杠"\"

后背全局函数/常量:
-非限定名称在命名空间中调用时,如果定义不存在,函数/常量将在非命名空间中去寻找定义
-如果是类,则直接报错,所以在命名空间中调用未定义的全局类,必须使用反斜杠"\"的完全限定名称方式

引用文件:
-以include导入到一个命名空间abc文件,并不会导致被导入的代码全部归于当前命名空间abc,而是相互独立的
-被include的文件中是什么命名空间就是什么命名空间,是非命名空间就是非命名空间

动态调用(无需反斜杠开头):
-动态调用必须使用"完全限定路径"
-既然动态调用,一定搜寻"完全限定路径"
-所以,用于区分"相对与绝对"的反斜杠"\"就不是必须的了
-中间需要使用反斜杠"\"时候,必须用"\\",无论是否单双引号

"当前"关键字(namespace必须反斜杠开头):
-__NAMESPACE__获取当前命名空间的字符串,常用于动态调用,用于字符串拼接"完全限定路径",非命名空间时是空字符串
-非定义处的namespace也表示当前命名空间,但是不能用于动态调用,且必须使用反斜杠"\"开头,非命名空间时也要反斜杠"\"开头

use(无需反斜杠开头):
-use用文件系统的角度理解就是"快捷方式",也叫别名
-可以定义命名空间和类这两种别名
-如果用了as显示定义,则别名的名称就是as的名称,否则以"最后名称"为别名的名称
-use时,原名称,必须是完全限定的,所以开头的反斜杠"\"也是可有可无的
-别名不可用于动态调用,因为别名替换,是在编译时就完成的
-别名是命名空间还是类,定义时是无法区分的,只负责编译时替换,具体语法是否正确,在替换完成后才能确定
-5.6+新增函数use function和常量use const的别名
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值