PHP面向对象03:命名空间
PHP面向对象03:命名空间
- 一、命名空间基础
- 二、子空间
- 三、命名空间访问
- 1. 非限定名称
- 2. 限定名称
- 3. 完全限定名称
- 四、全局空间
- 五、命名空间应用
- 六、命名空间引入
一、命名空间基础
namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构共存。- 基本语法:
namespace 空间名字; - 作用:能够创建同名结构,包括函数、常量、类。

- 注意事项:
- 命名空间的声明必须在所有代码之前。
- 一个文件中只定义一个空间。
二、子空间
- 命名空间子空间通过
namespace+路径符号\实现
<?php
# 创建一级空间
namespace my_space;# 创建子空间
namespace my_space\space1;
- 也可以直接创建子空间
三、命名空间访问
1. 非限定名称
- 直接访问空间元素的名字,此类访问的时当前代码所属空间内的元素。
- 非限定名称访问就好比是访问当前自己文件夹下的所有文件。
<?php
namespace my_space;
function show(){echo __METHOD__;
}
# 非限定访问
show();
2. 限定名称
- 在访问元素的前面使用相应的空间名字,限定名称访问时基于子空间来实现的。
- 使用自己当前的子空间名字 +
\+ 元素名称 - 限定名称访问就好比是访问当前自己文件夹下的子文件夹内容。
<?php
namespace my_space\space1;
function show(){echo __NAMESPACE__;
}namespace my_space;
function show(){echo __NAMESPACE__;
}# 限定名称访问
space1\show();
3. 完全限定名称
- 从根目录(全局空间)开始访问,使用
\作为全局空间开始符号。 - 完全限定名称访问就好比从磁盘根目录访问对应路径下的内容。
<?php
namespace my_space\space1;
function show(){echo __NAMESPACE__;
}namespace my_space;
function show(){echo __NAMESPACE__;
}# 完全限定名称访问
\my_space\space1\show();
四、全局空间
- 即空间元素在没有定义空间的情况下所属的空间,也是所有定义的空间的顶级空间。
- 全局空间没有名字。

- 所有的空间本质上都是在全局空间下划分的。
- 全局空间元素的访问:使用完全限定名称访问。

- 一旦命名空间出现,那么空间元素的访问就被限定在空间内。如果使用非限定名称访问,那么系统会以下解析逻辑:
- 首先一定在自己空间内查找
- 如果找不到元素,不同空间元素的处理不同
- 系统常量、系统函数如果找不到,会自动去全局空间找
- 系统类不会自动取全局空间找,而是直接报错

- 如果一个文件有空间,包含了一个没有空间的文件,那么要访问文件中的内容,需要使用全局空间
\。
五、命名空间应用
-
创建文件夹:
- root:根目录,存放用户可以直接访问的文件,比如入口,访问controller里的文件。
- controller:存放业务逻辑文件,所有业务都是类文件,业务需要操作数据库,请求model里的文件。
- model:存放数据库操作的类文件,一张表一个类文件。
- core:存放核心工具。

-
编写代码
- /core/DB.php
<?php namespace core; class DB{public function __construct() {echo "数据库初始化" . "->";}public function query() {echo "数据查询" . "->";} } - /model/User.php
<?phpnamespace model;use core\DB;include_once __DIR__ . "/../core/DB.php";class User {public function getAllUsers() {$sql = "select * from User";$db = new \core\DB();$db->query($sql);echo "查询所有用户数据" . "->";} } - /controller/User.php
<?phpnamespace controller; include_once __DIR__ . "/../model/User.php";class User {public function index() {$u = new \model\User();$u->getAllUsers();echo '实现了用户业务操作' . "->";} } - /index.php
<?phpinclude_once "controller/User.php";$u = new \controller\User(); $u->index();
- /core/DB.php

六、命名空间引入
- 命名空间引入,就是将另外一个空间的元素(类、函数和常量)引入到当前空间来,当作当前空间的元素访问,从而可以减少复杂的完全限定名称访问,取而代之的是非限定名称访问。
- use进行空间包含时,默认是从全局空间开始构建空间路径。
- 空间引入的元素默认是类,如果要引入其他元素,就必须使用响应关键字:
function和const - 如果引入空间元素与本空间元素重名,使用
as关键字。 - 引入的多种情况
- 引入一个空间中的多个同种(类、函数、常量)元素,可以使用
,分隔。 - 引入一个空间中的不同种元素,使用
use space\{Human, function show as my_show, const P}; - 引入一个空间中的所有元素,直接引入空间
use space;,但是会被当做子空间,使用元素时需要使用限定名称访问(不常使用,不方便)。
- 引入一个空间中的多个同种(类、函数、常量)元素,可以使用
<?phpnamespace space1;
class Man {public function __construct() {echo __METHOD__;}
}
function show() {echo __METHOD__;
}
const P = 3;namespace space2;
// 引入空间元素
use space1\Man;
// 引入函数
use function space1\show as my_show;
// 引入常量
use const space1\P;$man = new Man();
my_show();
echo P;
相关文章:
PHP面向对象03:命名空间
PHP面向对象03:命名空间一、命名空间基础二、子空间三、命名空间访问1. 非限定名称2. 限定名称3. 完全限定名称四、全局空间五、命名空间应用六、命名空间引入一、命名空间基础 namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构…...
Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去
路由文件 当应用程序需要向 Elasticsearch 添加文档时,它们首先要知道目标索引是什么。在很多的应用案例中,特别是针对时序数据,我们想把每个月的数据写入到一个特定的索引中。一方面便于管理索引,另外一方面在将来搜索的时候可以…...
前端开发常用的18个JavaScript框架和库
JavaScript 可以说是最流行的编程语言之一,也是Web 开发人员必须学习的 3 种语言之一,JavaScript 几乎可以做任何事情,更可以在包括物联网在内的多个平台和设备上运行。在WebGL库和SVG/Canvas元素的支持下,JavaScript变得惊人的强…...
理解、总结重点知识
一、常见的数据结构 1、数组结构 数组结构: 存储区间连续、内存占用严重、空间复杂度大 优点:随机读取和修改效率高,原因是数组是连续的(随机访问性强,查找速度快)缺点:插入和删除数据效率低&a…...
记一次从文件备份泄露到主机上线
前言 记录下某个测试项目中,通过一个文件备份泄露到主机上线的过程。 文件备份泄露 对于测试的第一项当然是弱口令,bp跑了一通词典,无果。目录又爆破了一通,发现一个web.rar可通,赶紧下载看看,如下图所示…...
8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案
1、python的数据类型有哪些 答:Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类型。 浮点型、复数类型、布尔型(布尔型就是只有两个值的整型)、这几种数字类型。列表、元组、字符串都是序列。 2、列表和元组的区别 答…...
Linux 基础知识之权限管理
目录一、权限的认识二、用户切换三、文件权限1.三类文件访问者2.文件权限类型3.文件访问权限4.文件权限值表示一、权限的认识 权限是对用户所能进行的操作的限制,如果不对用户作出限制,那么碰到恶意用户,就会损害其他用户的利益。 Linux是多用…...
百度LAC分词
对应数据的链接放这里了 import pandas as pd from util.logger import Log import os from util.data_dir import root_dir from LAC import LAC os_file_name os.path.split(os.path.realpath(__file__))[-1]# 加载LAC模型 lac LAC(mode"lac") # 载入自定义词典 …...
软件测试面试题 —— 整理与解析(1)
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:🌎【Austin_zhai】🌏 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能…...
深入浅出C++ ——红黑树模拟实现STL中的set与map
文章目录一、红黑树二、用泛型红黑树模拟实现set三、用泛型红黑树模拟实现map一、红黑树 红黑树作为set和map的底层容器,既要实现插入key又要实现插入pair,所以做了稍许的改动,使其成为一颗泛型结构的红黑树,通过不同的实例化参数…...
自动化测试框架设计
大数据时代,多数的web或app产品都会使用第三方或自己开发相应的数据系统,进行用户行为数据或其它信息数据的收集,在这个过程中,埋点是比较重要的一环。 埋点收集的数据一般有以下作用: 驱动决策:ABtest、漏…...
【虚拟仿真】Unity3D中实现鼠标的单击、双击、拖动的不同状态判断
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 这篇文章分享一下虚拟仿真项目中经常碰到鼠标事件控制代码。 …...
【2023】Prometheus-相关知识点(面试点)
目录1.Prometheus1.1.什么是Prometheus1.2.Prometheus的工作流程1.3.Prometheus的组件有哪些1.4.Prometheus有什么特点1.5.Metric的几种类型?分别是什么?1.6.Prometheus的优点和缺点1.7.Prometheus怎么采集数据1.8.Prometheus怎么获取采集对象1.9.Promet…...
英语二-电子邮件邀请短文写作
1. 邮件模板 Dear 邀请人, Hope you have a great day. I am writing this email to invite you to attend 主题. Please kindly find the following information for your reference: Time: 时间 Address: 地点 We hope that nothing will prevent you from coming, as…...
如何快速一次性通过pmp考试?
我们就从三个方向进行了解 1.PMP考试难不难? 2.PMP如何备考? 3.考试过程中需要注意什么? 一,PMP考试难不难? 首先关注的问题是,PMP考试难吗?我想全球55%的通过率和学会这边93.9%的通过率&a…...
1-Linux 保存kernel panic信息到flash
在系统运行过程中,如果内核发生了panic,那么开发人员需要通过内核报错日志来进行定位问题。但是很多时候出现问题的时候没有接调试串口,而报错日志是在内存里面的,重启后就丢失了。所以需要一种方法,可以在系统发生crash时&#x…...
linux基本功系列-top命令实战
文章目录一. top命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示进程信息3.2 显示完整的进程命令3.3 以批处理的形式展示3.4 设置信息更新频次3.5 显示指定进程号的信息3.6 top面板中常用参数3.7 其他用法四. top的相关说明4.1 交互命令介绍4.2 top面板每行信息的含义4.2.…...
6.5 拓展:如何实现 Web API 版本控制,同时兼容无版本控制的原始接口?
第6章 构建 RESTful 服务 6.1 RESTful 简介 6.2 构建 RESTful 应用接口 6.3 使用 Swagger 生成 Web API 文档 6.4 实战:实现 Web API 版本控制 6.5 拓展:如何实现 Web API 版本控制,同时兼容无版本控制的原始接口? 6.5 拓展&#…...
Springboot依赖注入Bean的三种方式,final+构造器注入Bean
文章目录Springboot依赖注入Bean的方式一、Field 注入/属性注入二、set注入三、构造器注入Springboot依赖注入Bean的方式 一、Field 注入/属性注入 Autowired注解的一大使用场景就是Field Injection。 Controller public class UserController {Autowiredprivate UserServic…...
【java】Spring Cloud --Spring Cloud Alibaba 微服务解决方案
文章目录1、Spring Cloud Alibaba 是什么先说说 Spring CloudSpring Cloud Alibaba和Spring Cloud 的区别和联系Spring Cloud Alibaba2、Spring Cloud Alibaba 包含组件阿里开源组件阿里商业化组件集成 Spring Cloud 组件3、Spring Cloud Alibaba 功能服务注册与发现支持多协议…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
