【问题标题】:Different ways to define a constant in a namespace在命名空间中定义常量的不同方法
【发布时间】:2015-06-02 10:10:29
【问题描述】:

似乎有不同的方法可以将常量放入命名空间,并根据它们的定义方式选择显示它们的方式。

简要概述:
如果我定义一个常量并使用namespace user;,我将无法使用\user\CONSTANT 稍后访问它。
如果使用命名空间名称定义一个常量,例如define('user\USERNAME', 'James'),我不需要使用namespace user;,可以通过两种方式访问​​常量——使用namespace user;user\USERNAME

示例:

注意:
所有示例都包含在测试文件中使用的全部代码(如果缺少前一个示例中的代码,那是因为它没有在新测试中使用)

define.php

namespace user;
define('USERNAME', 'James');
include 'display.php';

display.php

namespace user;
echo USERNAME; // Displays "James"

// This will NOT work (Fatal error: Undefined constant)
echo \user\USERNAME;

但是我可以通过另一种方式在命名空间中设置常量:
define.php

define('user\USERNAME', 'James');
include 'display.php';

现在我有两种方法来显示常量:

display.php

namespace user;
echo USERNAME; // Displays "James"

display.php

echo \user\USERNAME; // Displays "James"

两者都显示“James”就好了。

我的问题

我不是在问喜欢什么等等,但是使用这两种方法有什么问题吗?
是因为性能更好(假设微秒如此毫无意义),还是一种方法会导致 PHP 中的其他地方出现问题?

我知道没有像namespace user; 那样显式设置命名空间意味着我在该文件中没有得到任何其他设置为命名空间的东西,如果我只想要命名空间中的常量就可以了。

这只是根据场景的选择,还是由于某种原因一种方法不好?

【问题讨论】:

    标签: php namespaces constants


    【解决方案1】:

    如果您只想在命名空间中定义常量,您应该使用第二个变体。所以

    define('user\USERNAME', 'James');
    

    不仅是首选语法,它还是唯一正确的语法。如果你在写

    define('USERNAME', 'James');
    

    那么你定义了一个 GLOBAL CONST,即使你的定义调用是在用户命名空间内完成的。所以显然这会起作用,因为您可以从命名空间内访问值 - 也可以从任何命名空间内访问,所以不是你想要的:)

    【讨论】:

    • 啊,你是对的 - 我没有测试只是回显全局常量。所以基本上我的第一个例子,我什至不需要define.php中的namespace user;。实际上,我应该看到 :( 干杯
    猜你喜欢
    • 2011-12-18
    • 2013-09-17
    • 2013-06-03
    • 1970-01-01
    • 2013-06-12
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多