在命名空间中定义常量的不同方法

3

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

简要概述:
如果我定义了一个常量并使用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"

AND

display.php

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

两种方式都可以正常显示“James”。

我的问题

我不是在问你喜欢哪种方法等等,而是这两种方法有没有问题?
是否有一种方法由于性能更好(认为微秒很无聊),或者是否有一种方法会在PHP的其他地方引起问题?

我知道如果不像这样明确设置命名空间,例如namespace user;,那么就无法将该文件中的其他内容设置为该命名空间,如果我只想在命名空间中使用常量,则这样做也可以接受。

这只是一种取决于场景的选择,还是有一种方法存在某些问题?

1个回答

2
如果您只想在命名空间中定义常量,应使用第二种变体。所以。
define('user\USERNAME', 'James');

不仅是首选语法,而且是唯一正确的语法。如果您正在编写

define('USERNAME', 'James');

如果你在用户名称空间内进行定义调用,那么你就定义了一个全局常量。显然这会起作用,因为你可以从命名空间内部访问该值 - 但也可以从任何命名空间内访问,这不是你想要的结果 :)


啊,你说得对 - 我没有测试只是回显全局常量。所以基本上我的第一个例子中,我甚至不需要在define.php中使用namespace user;。实际上,我应该看到了这一点:(干杯 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接