当前位置: 首页 > news >正文

目录启示:使用 use 关键字为命名空间内的元素建立非限定名称

文章目录

  • 参考
  • 环境
  • 三种名称
      • 非限定名称
      • 限定名称
      • 完全限定名称
      • 举个栗子
  • use
      • use 关键字
      • use ... as ..
  • 命名冲突
      • 真假美猴王
      • 两个世界

参考

项目描述
搜索引擎BingGoogle
AI 大模型文心一言通义千问讯飞星火认知大模型ChatGPT
PHP 官方PHP Manual
PHP 官方language.namespaces.rationale.php

环境

项目描述
PHP5.5.05.6.87.0.07.2.57.4.98.0.08.2.9
PHP 编辑器PhpStorm 2023.1.1(专业版)

三种名称

在 PHP 命名空间的上下文中,限定名称 (Qualified Name)、非限定名称 (Unqualified Name) 与完全限定名称 (Fully Qualified Name) 是 三种引用命名空间中的元素(类、接口、函数 与 常量)的方式

非限定名称

非限定名称是一个 不包含任何命名空间前缀的名称,如 ClassName 就是一个非限定名称。当使用非限定名称时,PHP 会 优先在当前命名空间中查找该元素。若该原始不存在于当前命名空间中,则将在全局命名空间中对其进行查找(仅当被查找元素为函数或常量时)

限定名称

限定名称包含 命名空间前缀,但没有开头的反斜线 \(该反斜线表示全局命名空间)。如 NamespaceName\ClassNameNamespaceName\functionName() 就是限定名称。当使用限定名称时,PHP 会 基于当前命名空间来解析该名称

完全限定名称

完全限定名称从反斜线 \(该反斜线表示全局命名空间) 开始,后接命名空间或元素的名称。如 \Full\NamespaceName\ClassName\Full\NamespaceName\functionName() 就是完全限定名称。当使用完全限定名称时,PHP 会 完全忽略当前命名空间的上下文,并从全局上下文解析名称

举个栗子

<?phpnamespace HOME\RedHeart {function saySelf() {# 通过魔术常量 __NAMESPACE 回当前所属的命名空间名称return __NAMESPACE__;}function saySon() {# 尝试访问当前命名空间中的子命名空间 BinaryMoon 中的 saySelf() 函数return BinaryMoon\saySelf();}
}namespace HOME\RedHeart\BinaryMoon {function saySelf() {return __NAMESPACE__;}
}# 全局命名空间
namespace {# 尝试访问 HOME\RedHeart\BinaryMoon 命名空间下的 saySelf() 函数var_dump(\HOME\RedHeart\BinaryMoon\saySelf());# 尝试访问 HOME\RedHeart 命名空间下的 saySelf() 函数var_dump(HOME\RedHeart\saySelf());# 尝试访问 HOME\RedHeart 命名空间下的 saySon() 函数var_dump(\HOME\RedHeart\saySon());
}

执行效果

string(24) "HOME\RedHeart\BinaryMoon"
string(13) "HOME\RedHeart"
string(24) "HOME\RedHeart\BinaryMoon"

use

use 关键字

在 PHP 中,use 关键字用于导入命名空间中的 接口函数常量,以便在当前命名空间中直接使用这些元素的 非限定名称,有助于提高开发体验😎。对此,请参考如下示例:

<?phpnamespace HOME\RedHeart\BinaryMoon {const CONSTANT = __NAMESPACE__;class MyClass{public $name = 'RedHeart';public $nation = 'China';public $age = 18;}function sayHello() {print("Hello World\n");}
}namespace {# 将 \HOME\RedHeart\BinaryMoon\ 命名空间下的# MyClass 类导入至当前命名空间,便可以使用非限定名称访问该类。use \HOME\RedHeart\BinaryMoon\MyClass;var_dump(new MyClass());# 将 \HOME\RedHeart\BinaryMoon\ 命名空间下的# 函数 sayHello 与常量 CONSTANT 导入当前命名空间use function HOME\RedHeart\BinaryMoon\sayHello;use const HOME\RedHeart\BinaryMoon\CONSTANT;sayHello();print(CONSTANT . "\n");
}

执行效果

在 PHP 中,use 关键字的默认操作对象是 。若您需要将 函数常量 导入至当前命名空间,请在 use 关键字后添加 functionconst 以告知 PHP 解释器。

object(HOME\RedHeart\BinaryMoon\MyClass)#1 (3) {["name"]=>string(8) "RedHeart"["nation"]=>string(5) "China"["age"]=>int(18)
}
Hello World
HOME\RedHeart\BinaryMoon

use … as …

在 PHP 中,use ... as ... 语句用于导入命名空间中的 接口函数常量并为它们创建一个 别名,以便可以在当前代码块中使用别名来引用相关的元素。对此,请参考如下示例:

<?phpnamespace HOME\RedHeart\BinaryMoon {const CONSTANT = __NAMESPACE__;class MyClass{public $name = 'RedHeart';public $nation = 'China';public $age = 18;}function sayHello() {print("Hello World\n");}
}namespace {use \HOME\RedHeart\BinaryMoon\MyClass as AnClass;use function HOME\RedHeart\BinaryMoon\sayHello as speakHello;use const HOME\RedHeart\BinaryMoon\CONSTANT as ANCONSTANT;var_dump(new AnClass());speakHello();print(ANCONSTANT . "\n");
}

执行效果

object(HOME\RedHeart\BinaryMoon\MyClass)#1 (3) {["name"]=>string(8) "RedHeart"["nation"]=>string(5) "China"["age"]=>int(18)
}
Hello World
HOME\RedHeart\BinaryMoon

命名冲突

真假美猴王

<?phpnamespace BinaryMoon {class BinaryMoon {}
}

在上述示例中,命名空间 BinaryMoon 与其 类元素 BinaryMoon 使用相同名称。按照正常情况,两者将发生 命名冲突,但上述示例却能够正常执行。这是由于,命名空间 BinaryMoon 的完全限定名称是 \BinaryMoon,而 类元素 BinaryMoon 的完全限定名称是 \BinaryMoon\BinaryMoon,两者的名称 并不真的相同

两个世界

实际上,命名空间与其他元素之间并不会产生命名冲突,即使两者的完全限定名称一模一样。对此,请参考如下示例:

<?phpnamespace BinaryMoon {}namespace {class BinaryMoon {}var_dump(new \BinaryMoon());
}

执行效果

在使用 class 关键字创建类 BinaryMoon 后,类与命名空间具有相同的完全限定名称 \BinaryMoon,这并不会导致两者发生 命名冲突,PHP 会 依据具体情景进行分析来确定如何解析该名称。但程序并非完美的,它无法应对所有可能的场景,鉴于此,请 尽可能不要尝试使用相同的名称

object(BinaryMoon)#1 (0) {
}

相关文章:

目录启示:使用 use 关键字为命名空间内的元素建立非限定名称

文章目录 参考环境三种名称非限定名称限定名称完全限定名称举个栗子 useuse 关键字use ... as .. 命名冲突真假美猴王两个世界 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型、ChatGPTPHP 官方PHP ManualPHP 官方language.namespaces.ra…...

Go语言介绍与安装

介绍与安装 本教程介绍了 Go&#xff0c;并讨论了选择 Go 相对于其他编程语言的优势。我们还将学习如何在Windows 中安装 Go。 介绍 Go也称为Golang&#xff0c;是由 Google 开发的一种开源、编译型、静态类型的编程语言。 Go创造背后的关键人物是Rob Pike、 Ken Thompson和…...

常用傅里叶变换表

傅里叶展开 傅里叶变换 傅里叶逆变换 时域信号 弧频域信号 线性变换 时域平移 频域平移 伸缩变换 微分性质 逆变换的微分性质 卷积定理 原函数变换结果 单位阶跃函数&#xff1a; 符号函数&#xff1a; 矩形函数&#xff1a; 辛格函数&#xff1a;...

生活中的视音频技术

生活中的视音频技术 平时我们打开电脑中自己存电影的目录的话&#xff0c;一般都会如下图所示&#xff0c;一大堆五花八门的电影。&#xff08;其实专业的影视爱好者一概会把影视文件分门别类的&#xff0c;但我比较懒&#xff0c;一股脑把电影放在了一起&#xff09; 因为下载…...

一种用于肽图分析的烷化剂,Desthiobiotin-Iodoacetamide

中文名&#xff1a;脱硫生物素-碘乙酰胺 英文名&#xff1a;Desthiobiotin-Iodoacetamide 化学式&#xff1a;C14H25IN4O3 分子量&#xff1a;424.28 外观&#xff1a;固体/粉末 规格&#xff1a;10mg、25mg、50mg等&#xff08;接受各种规格的定制服务&#xff0c;具体可…...

【(数据结构) —— 顺序表的应用-通讯录的实现】

&#xff08;数据结构&#xff09;—— 顺序表的应用-通讯录的实现 一.通讯录的功能介绍1.基于动态顺序表实现通讯录(1). 功能要求(2).重要思考 二. 通讯录的代码实现1.通讯录的底层结构(顺序表)(1)思路展示(2)底层代码实现(顺序表&#xff09; 2.通讯录上层代码实现(通讯录结构…...

macbook磁盘清理免费教程分享

笔记本电脑在是我们工作和生活中重要组成部分&#xff0c;磁盘清理是常有的事&#xff0c;而macbook作为其中的代表之一&#xff0c;也越来越受到人们的青睐。然而&#xff0c;如何进行macbook磁盘清理&#xff0c;也事许多人都会遇到的问题&#xff0c;特别是被提示“磁盘已满…...

cartographer_ros数据加载与处理

node_main.cc 坐标系的读取通过tf_bufferautonode类是cartographer_ros接收传感器数据&#xff0c;并传输到cartographer里&#xff0c;同时还会发布map&#xff0c;轨迹等node_options数据传给两个地方&#xff0c;一个是map_builder进行slam操作&#xff0c;一个是node做数据…...

设计模式-7种结构型模式

适配器模式&#xff1a; 将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同调用。 桥接模式&#xff1a; 将类的抽象部分和他的实现部分分离开来。是他们可以独立的变化。 它是用组合关系代替继承关系来实现&#xff0c;从而降低了抽象和实现这两…...

华为李鹏:加速5G商业正循环,拥抱更繁荣的5.5G(5G-A)

2023年10月10日&#xff0c;在华为主办的第十四届全球移动宽带论坛上&#xff0c;华为高级副总裁、运营商BG总裁李鹏面向来自全球的运营商和产业伙伴&#xff0c;提出抓住网络需求和趋势的力量——“面向后天的业务&#xff0c;积极规划明天的网络&#xff0c;加速5G商业正循环…...

Marin说PCB之CoilcraftBourns POC 电感的性能对比

十一小长假本来是一件美好事情。可是天有不测风云&#xff0c;小编我却有祸兮来了。本来是公司的硬件同事强哥要回以色列了&#xff0c;最近他们国家那边都在打仗&#xff0c;强哥本着舍身为国的精神回国抗战去了。小编我就想着在他回国之前搞了篮球比赛送别一下他呢&#xff0…...

聊聊Maven的依赖传递、依赖管理、依赖作用域

1. 依赖传递 在Maven中&#xff0c;依赖是会传递的&#xff0c;假如在业务项目中引入了spring-boot-starter-web依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>…...

centos6/7 SOCKS5 堆溢出漏洞修复(RPM方式)curl 8.4 CVE-2023-38545 CVE-2023-38546

引用 https://darkdark.top/update-curl.html centos6 rpm 升级包下载&#xff1a;https://download.csdn.net/download/sinat_24092079/88425840 yum update libcurl-8.4.0-1.el6.1.x86_64.rpm curl-8.4.0-1.el6.1.x86_64.rpmcentos7 rpm 升级包下载&#xff1a;https://down…...

C#,数值计算——数据建模Proposal的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Proposal { public Normaldev gau { get; set; } null; private double logstep { get; set; } public Proposal(int ranseed, double lstep) { this.gau…...

如何使用命令生成动态链接库.dll文件(保姆级教学)

如何使用命令生成动态链接库.dll文件 /*** file 如何使用命令生成动态链接库.dll文件* author jUicE_g2R(qq:3406291309)* * brief 教学演示* tool visual studio2022&#xff08;2019也适用&#xff09;* * copyright 2023.10* COPYR…...

Qt之模块介绍

Qt提供了很多功能模块&#xff0c;我们需要知道的是这些模块有些加入了标准库&#xff0c;有一些并没有加入到标准库。至于为什么没有加入到标准库通过chatgpt得到的答案如下&#xff1a; Qt 是一个强大的跨平台 C 框架&#xff0c;它包括了很多核心模块和功能&#xff0c;以支…...

Socks5代理和代理IP

在数字时代&#xff0c;网络工程师必须不断掌握新技术&#xff0c;以解决跨界电商、爬虫数据采集、出海业务扩展、网络安全保护以及游戏性能优化等各种技术挑战。本文将深入探讨Socks5代理和代理IP技术&#xff0c;它们在各个领域中的应用&#xff0c;如何为网络工程师提供了强…...

计算机指令、机器码

目录 背景 在软硬件接口中&#xff0c;CPU 帮我们做了什么事&#xff1f; 从编译到汇编&#xff0c;代码怎么变成机器码&#xff1f; 解析指令和机器码 总结延伸 背景 上大学的时候&#xff0c;我们系里教 C 语言程序设计的老师说&#xff0c;他们当年学写程序的时候&…...

MyLife - Docker安装Consul

Docker安装Consul 个人觉得像consul之类的基础设施在线上环境直接物理机安装使用可能会好些。但是在开发测试环境用docker容器还是比较方便的。这里学习下docker安装consul使用。 1. Consul 镜像库地址 Consul 镜像库地址&#xff1a;https://hub.docker.com/r/hashicorp/consu…...

Leetcode刷题笔记--Hot61-70

1--课程表&#xff08;207&#xff09; 主要思路&#xff1a; 用 in 记录每一门课程剩余的先修课程个数&#xff0c;当剩余先修课程个数为0时&#xff0c;将该课程加入到队列q中。 每修队列q中的课程&#xff0c;以该课程作为先修课程的所有课程&#xff0c;其剩余先修课程个数…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...