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

时间:2015-03-29 11:27:45

标签: php namespaces constants

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

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

两个显示“詹姆斯”就好了。

我的问题

我不是在问你喜欢什么等,但使用这些方法有问题吗?
一个更好的是由于性能(假设微秒是如此毫无意义),或者一种方法可能导致PHP中的其他地方出现问题?

我知道没有像namespace user;那样明确地设置名称空间意味着我在该文件集中没有得到任何其他东西,如果我只想在命名空间中使用常量,那就没关系。

根据情况,这只是一个选择,还是因某种原因导致一种方法不好?

1 个答案:

答案 0 :(得分:1)

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

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

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

define('USERNAME', 'James');

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