您的位置:首页 > 编程语言 > PHP开发

php的命名空间

2015-12-21 10:14 471 查看
有效:命名空间对类(抽象,接口,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的别名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: