侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php命名空间介绍及使用

php  /  管理员 发布于 2年前   700

php命名空间介绍及使用

1. 什么是命名空间?

历史

命名空间在 PHP5.3.0 中引入。

作用

其作用是按照一种虚拟的层次结构组织 PHP 代码,这种层次结构类似操作系统中文件系统的目录结构。

为什么用?

命名空间是现代 PHP 组件生态的基础

现代的 PHP 组件框架代码都是放在各自全局唯一的厂商命名空间中,以免和其他厂商使用的常见类名冲突。

2. 如何用命名空间?

声明命名空间

位置: 在 <?php 标签后的第一行声明

语法: 声明语句以 namespace 开头,随后是一个空格,然后是命名空间的名称,最后以 ; 结尾。


先简单来看看例子 1:

命名空间经常用于设置顶层厂商名,比如我们设置厂商名为 LaravelAcademy:

<?php
namespace LaravelAcademy;

听说过子命名空间吗?

如果我们想用 LaravelAcademy 下的某个文件夹 ModernPHP 中的代码该怎么做呢?

答案是使用子命名空间。 子命名空间的声明方式和前面的示例完全一样,唯一的区别是我们要使用 \ (转义符号) 把命名空间和子命名空间分开,例如:

<?php
namespace LaravelAcademy\ModernPHP;

这个命名空间后的所有类、接口、函数和常量都位于 LaravelAcademy\ModernPHP 中。

结论:

在同一个命名空间中的类没必要在同一个 PHP 文件中声明,可以在 PHP 文件的顶部指定一个命名空间或子命名空间,此时,这个文件的代码就是该命名空间或子命名空间的一部分。因此我们可以在不同文件中编写属于同一个命名空间的多个类。


再来一个让你加深理解的例子 2:

例如, cart 和 order 这两个模块都处于同一个 shop 项目内,通过命名空间子空间表达关系。

<?php
namespace shop\cart;//命名空间表示处于 shop 项目下的 cart
class Test {

}

namespace shop\order;//命名空间表示处于 shop 项目下的 order
class Test {
//申明与上面空间相同的类
}
$test = new Test();//调用当前的类
$cart = new \shop\cart\Test();//调用shop\cart空间的类

?>

命名空间的子空间还可以定义很多层次,例如 cn\my\www\shop 。多层子空间的声明通常使用公司域名的倒置,再加上项目名称组合而成。这样做的好处是域名在互联网上是不重复的,不会出现和网上同名的命名空间,还可以辨别出是哪家公司的具体项目。有很强的广告效应。


注:厂商命名空间是最顶层的命名空间,也是最重要的命名空间,用于识别品牌或组织,必须具有全局唯一性。子命名空间相对而言没那么重要,但是可以用于组织项目的代码。


  • 上一条:
    介绍一种调试PHP应用程序debug的类,感觉不错哦。
    下一条:
    php命名空间别名/导入的介绍及使用
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在php语言中对数组参数实现签名算法及加解密数组功能流程步骤(0个评论)
    • 在PHP语言中实现手机加密解密算法代码示例(0个评论)
    • 在PHP 8.3版本中json_validate跟json_decode函数对比浅析(0个评论)
    • 在PHP语言中class类自动加载相关文件浅析(0个评论)
    • PHP 8.2版本发布(0个评论)
    • 近期文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 嘿加密世界让我们谈谈在共识中将中本聪主流化(0个评论)
    • 在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客