php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: php 视频教程
查看: 453|回复: 0

5、命名空间

[复制链接]

61

主题

61

帖子

426

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
426
发表于 2021-5-2 22:16:42 | 显示全部楼层 |阅读模式
[TOC]
## 概念 ##
为了区分名字相同含义不同的函数、变量、常量等设立的功能
## 基本应用 ##
使用 namespace 声明命名空间, namespace 需要写在 PHP 脚本的顶部, 必须是第一个 PHP 指令, 不要在前面出现非 PHP 代码、HTML 或空格。

命名空间可以在一个页面中出现多个, 从当前 namespace 到下一个 namespace 就是当前命名空间的范围, 但是建议在一个文件中只出现一个命名空间, 避免混乱
## 跨命名空间调用元素 ##
不同命名空间是不能直接互相访问的, 需要使用 "空间名\元素名" 的方式调用, 如:

----------
    namespace Demo1
        var $name;
    namespace Demo2
        echo \Demo1\$name;
## 子空间和公共空间 ##
PHP 中的命名空间和文件系统很像, 可以定义子空间来描述空间之间的所属关系, 可以使用多层, 一般为公司域名倒置 + 项目名称, 如: xyz\hdiot\www\blog

没有设定命名空间的元素均属于公共空间, 在命名空间中调用默认空间中的元素的语法为: \元素名, 如: \Demo();
## 命名空间的名称和术语 ##
- 非限定名称: 不包含前缀的类名称($u = new User();), 如果当前命名空间为 \xyz\hdiot, 则 User 将被解析为 \xyz\hdiot\User
- 限定名称: 包含前缀的名称($u = new hdiot\User();), 如果当前名称空间为 \xyz, 则 User 将被解析为 \xyz\hdiot\User
- 完全限定名称: 包含了全局前缀操作符的名称($u = new \hdiot\User();), 在这种情况下 User 将被解析为 \hdiot\User

## 别名和导入 ##
别名可以看做是快捷使用命名空间的一种方法, 可以为命名空间/类设置别名, 避免了使用冗长的命名空间, 而是用简短的一串字符串代替
## 使用别名 ##
使用 use 关键字为命名空间/类设置别名

----------
    use 命名空间 as 别名;     // 为命名空间设置别名
    use 命名空间\类 as 别名;   // 为类设置别名
使用时将原本的命名空间/类替换成别名即可
## 注意事项 ##
如果别名或者导入的命名空间中的元素, 与原命名空间的元素同名时, 会发生冲突, 产生致命错误
## 魔术常量 ##

----------
    namespace: 当前命名空间
    __NAMESPACE__: 当前命名空间名称



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|php中文网 | cnphp.com

GMT+8, 2021-6-25 20:37 , Processed in 0.024992 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表