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


Different ways to define a constant in a namespace

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

简要概述:
如果我定义了一个常量并使用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;那样显式设置命名空间意味着我不会将该文件中的任何其他内容设置为命名空间,如果我只想在命名空间中设置常量,那也没关系。

这只是一个取决于场景的选择,还是一种方法由于某种原因而不好?

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

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

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

define('USERNAME', 'James');

则定义GLOBAL CONST,即使您的define调用是在用户名称空间内完成的。很明显,这是可行的,因为您可以从命名空间中访问值,也可以从任何命名空间中访问,所以这不是您想要的:)