【问题标题】:Should I namespace global functions in PHP?我应该在 PHP 中命名全局函数吗?
【发布时间】:2012-04-01 02:07:17
【问题描述】:

在 PHP 中,我在类级别使用命名空间。但是,Netbeans 也不断告诉我命名空间我的全局函数。例如,如果我输入

str_replace('stuff');

然后 Netbeans 会建议将其更改为:

\str_replace('stuff');

这是 PHP 推荐,还是 Netbeans 过于热心?我无法在 PHP 文档中找到任何说明这两种方式的内容。

我看不到它会导致代码出现任何问题。但是,在不知道它为什么首先推荐它的情况下忽略 Netbeans 感觉是错误的。但是,在不知道这是正确的事情的情况下改变我的编码习惯也感觉不对。

【问题讨论】:

  • Ì 不知道有任何此类官方建议。它可能是您正在使用的编码约定的一部分吗?
  • 我看到的方式是,如果您在代码中使用名称空间并从其他名称空间中调用全局函数,您应该(可能必须)但如果您没有在任何地方使用名称空间,则没有这样做的重点。
  • @h00ligan PHP 手册中没有任何内容这样说,而且肯定没有必要,因为 PHP 将回退到函数调用的全局范围。
  • @Gordon,那就更不需要它了 :)
  • @Gordon 仅使用 Netbeans 中的默认值 - 我没有进行任何更改。

标签: php namespaces


【解决方案1】:

中没有这样的推荐

也没有必要使用全局标识符,因为当当前命名空间中没有该名称的函数时,PHP 将回退到全局函数定义。

话虽如此,添加标识符的唯一原因是更明确地表明您希望使用实际的全局事物来防止在有人将同名函数添加到当前命名空间时意外更改代码行为。

您可能想在Netbeans Mailing List 上询问有关您的 IDE 为何建议这样做的更多详细信息。

【讨论】:

    【解决方案2】:

    肯定过分热心,但我无法重现这是带有 PHP 插件 1.17.1 的 Netbeans 7.0.1。无论如何,这不是惯例,我根本不会认为这是最佳实践。

    【讨论】:

    • 奇怪 - 我没有更改任何默认值。确切的消息是'Fix name to "\str_replace"'。
    • 所以,这似乎是更高版本的问题。因为我有 NetBeans 8.1 - 正如用户 @Blowski 所说的那样。
    【解决方案3】:

    Netbeans 根本没有遵循解析命名空间as documented 的记录规则:

    1. 需要限定全局类(如 DateTime),否则 PHP 将在当前命名空间中查找该类。
    2. 如果当前命名空间中不存在全局函数(如 array_filter)和常量,则会在全局命名空间中找到它们(无需明确限定)。

    换句话说,您的代码应该被认为是基于文档化规则的惯用代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多