如何使用其他命名空间中的对象以及如何在 PHP 中导入命名空间

2023-11-27

这两行之间的主要区别是什么?:

$obj = new ArrayObject();

&

$obj = new \ArrayObject();

当我使用第一行时,出现错误:"Fatal error: Class '\Foo\Bar\ArrayObject' not found..."我不太确定为什么会出现此错误?第二行似乎已经解决了问题。


如果您使用:

$obj = new ArrayObject();

这意味着 ArrayObject 是在当前命名空间中定义的。您可以在全局命名空间中使用此语法(当前作用域中没有定义命名空间),或者如果 ArrayObject 定义在与当前作用域相同的命名空间中(例如Foo\Bar).

如果你使用:

$obj = new \ArrayObject();

这意味着 ArrayObject 是在全局命名空间中定义的。

在您的示例中,您可能有类似的代码:

namespace Foo\Bar;

$obj = new ArrayObject();

它不会工作,因为你还没有定义ArrayObject in Foo\Bar命名空间。

上面的代码等同于:

namespace Foo\Bar;

$obj = new \Foo\Bar\ArrayObject();

And if ArrayObject在全局命名空间中定义(可能在您的情况下)您需要使用代码:

namespace Foo\Bar;

$obj = new \ArrayObject();

强调 ArrayObjectis not定义于Foo\Bar命名空间;

另一件事 - 如果您在当前命名空间中的许多地方使用 ArrayObject,则每次添加前导反斜杠可能不是很方便。这就是为什么您可以导入名称空间,以便可以使用更简单的语法:

namespace Foo\Bar;

use ArrayObject;

$obj = new ArrayObject();

如你所见use ArrayObject;在创建对象之前添加以从全局命名空间导入 ArrayObject。使用use您不需要添加(也不应该)添加前导反斜杠,但它的工作方式与以前相同use \ArrayObject;所以上面的代码在逻辑上相当于:

namespace Foo\Bar;

use \ArrayObject;

$obj = new ArrayObject();

然而,正如我所说,导入名称空间时不应使用前导反斜杠。引用 PHP 手册:

请注意,对于命名空间名称(包含命名空间分隔符的完全限定命名空间名称,例如 Foo\Bar,而不是不包含命名空间分隔符的全局名称,例如 FooBar),前导反斜杠是不必要的,也不建议使用,因为导入名称必须是完全限定的,并且不会相对于当前命名空间进行处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用其他命名空间中的对象以及如何在 PHP 中导入命名空间 的相关文章

随机推荐

  • Java 9、Hibernate 和 java.sql/javax.transaction

    我尝试将使用 Hibernate 的项目 升级 到 Java 9 但在使模块正常运行时遇到问题 我的相关部分module info java看起来像这样 module test requires java base requires hib
  • 使用 ggplot2 中矩阵的值创建热图

    我见过热图 其值是在各种 R 图形系统中制作的 包括晶格和基数 如下所示 我倾向于使用ggplot2有点 希望能够制作一个热图 并绘制相应的单元格值 这是热图和使用的尝试geom text library reshape2 ggplot2
  • 你能清除jquery ajax缓存吗?

    我想知道是否可以通过特定的 AJAX 方法清除缓存 假设我有这个 ajax url test html cache true success function html results append html 现在 99 的情况下 可以使用
  • 使用 kotlin + quarkus 注入某些依赖项时出错

    我想在我的 Kotlin 资源文件中包含依赖项 但我不能 我做了这个教程 https quarkus io guides rest client guide但是 为了启动该项目 我在项目中包含了扩展 kotlin 我的代码如下 国家 地区
  • 当同一用户 ID 尝试在多个设备上登录时,如何终止另一台设备上的会话?

    我想要做的是将用户 ID 限制为一次只能登录一台设备 例如 用户 ID abc 登录到他们的计算机 用户 ID abc 现在尝试通过手机登录 我想要发生的是终止他们计算机上的会话 Spotify 应用程序正是这样做的 Spotify 一次只
  • 如何使用 PRISM 和 MEF 将视图注入到 UI 中?

    我已经搜索了一些教程 甚至查看了pluralsite PRISM 简介 然而 大多数示例基于使用 Unity 容器 并且缺乏有关如何使用 Mef 容器实现此功能的信息 我的简单 helloworld 模块基于网络教程 我的代码是相同的 只是
  • 如何将文件从主机复制到Docker容器?

    我正在尝试为我们使用的 Docker 容器构建备份和恢复解决方案 我有我创建的 Docker 基础镜像 ubuntu base 并且不希望每次都使用 Docker 文件重建它来向其中添加文件 我想创建一个从主机运行的脚本并使用以下命令创建一
  • 如何解决父pom依赖问题:无法读取工件描述符;找不到神器?

    我最近向 Maven Central 发布了三个工件 https search maven org search q ced2ar3 rdb 这三者是其中的一部分同一个项目并同时出版 我现在正在尝试使用 ced2ar rdb 和 ced2a
  • 当我尝试在 EF 4.3.1 中启用迁移时引发异常

    我在 Net 4 0 类库项目中使用 nuget 安装的实体框架 4 3 1 在这种情况下 当我在 PM 控制台中调用 Enable Migrations 命令时 我收到以下异常 使用 1 个参数调用 LoadFrom 时出现异常 Nelz
  • 带有 ChoiceField 的 Django Rest 框架

    我的用户模型中有一些字段是选择字段 我正在尝试找出如何最好地将其实现到 Django Rest Framework 中 下面是一些简化的代码来展示我正在做的事情 models py class User AbstractUser GENDE
  • 如何在 Django 中处理来自 MySQL 的“部分”日期(2010-00-00)?

    在我的一个使用 MySQL 作为数据库的 Django 项目中 我需要一个date还接受 部分 日期的字段 例如仅年份 YYYY 和年份和月份 YYYY MM 加上正常日期 YYYY MM DD The dateMySQL 中的字段可以通过
  • 记住 Swing 中的窗口位置

    我有一个相当大的 swing 应用程序 我想让它记住所有窗口 jframe 等的大小 因此 如果用户按照自己喜欢的方式调整窗口大小 下次窗口看起来会完全相同 我是否有更好的选择来解决它 但手动将每个窗口的位置 大小写入优先 有没有什么方便的
  • 当尝试使用 Jasmine 和 AngularJS 进行单元测试时,参数“fn”不是一个函数

    我正在尝试在 Angular 应用程序中使用 Jasmine 进行一些单元测试 但遇到了一些错误 Error Error injector modulerr Failed to instantiate module LocalStorage
  • 使用保留字时间戳作为字段名称(Firebird 2.5)

    除了 MSSQL 和 SQLite 之外 我还正在扩展现有应用程序的数据层以与 Firebird 2 5 配合使用 但我遇到了障碍 我有一个名为 TimeStamp 的字段 它将数据 时间存储为 TimeStamp 类型 这在类型为日期时间
  • WCF 服务作为 MVC 应用程序的一部分

    我有一个 MVC4 中的 Web 应用程序 我将主持一个共享主机提供者 我想用 WCF 服务来扩展它来上传文件 将有一个 WPF 桌面应用程序 允许用户直接从他们的 PC 上传文件 我宁愿以某种方式 一起 托管它 以避免对存储目录的读 写访
  • 正则表达式中`[.]`与`.`之间的差异

    下面的表达式并不相同 and 为什么会这样 它们究竟有何不同 之间有什么相互作用 以及正则表达式中的特殊字符 谢谢 The dot 通常是通配符 匹配任何字符 在一个字符类中 但是 它被视为文字并且仅匹配点
  • 如何创建覆盖 Windows 标题栏的 Java Swing 应用程序?

    我正在开发一个将用于心理学实验的 java swing 应用程序 研究人员要求我让该程序 黑屏 以便用户不会受到外界刺激 他们希望 Swing 应用程序能够真正全屏 并且顶部没有任何类型的标题栏或最小化 最大化 关闭按钮 该软件将在使用 J
  • 如何使用 AngularJS NgRoute 启动 MixItUp

    我一直在使用 AngularJS 设置一个 jquery 插件 MixItUp 虽然我可以在使用 NgRoute 的部分视图之一中成功启动容器 但一旦我移动到其他页面视图并返回 MixItUp 似乎不知道如何启动设置再次 我尝试过 docu
  • 选择列列表中至少有一个值不为空的行

    我有一个包含许多列 例如 1000 的大数据框 我有一个列列表 由脚本生成 10 我想选择原始数据框中的所有行 其中至少我的列列表之一不为空 因此 如果我提前知道列数 我可以这样做 list of cols col1 df df list
  • 如何使用其他命名空间中的对象以及如何在 PHP 中导入命名空间

    这两行之间的主要区别是什么 obj new ArrayObject obj new ArrayObject 当我使用第一行时 出现错误 Fatal error Class Foo Bar ArrayObject not found 我不太确