为什么有些代码使用define()而不引用常量名称?

时间:2014-11-28 11:20:24

标签: php constants

PHP的文档描述了define()函数,其常量名称为字符串。所以它应该在引号中:

define('ANY_CONSTANT',1);

但是我看到很多没有这样的引号的例子:

define(ANY_CONSTANT,1);

我还在online PHP tester中测试了两种方式,并且都正常工作。

任何人都可以解释一下:这两种方法有什么区别吗?这些更好吗?在哪种情况下?

3 个答案:

答案 0 :(得分:7)

简短回答:是的,你应该。

如果不这样做,PHP将查找具有该名称的常量,而不是找到一个,并假设它是一个字符串并使用它。如果您将PHP设置为报告通知,则会在错误日志中生成通知。

答案 1 :(得分:1)

使用

  

定义(ANY_CONSTANT,1);

会引发警告:

  

PHP注意:使用未定义的常量ANY_CONSTANT - 假设   'ANY_CONSTANT'

所以你肯定需要使用引号。

答案 2 :(得分:1)

(一如既往)这取决于具体情况:

define(ANY_CONSTANT,1);

是合法的,因为传递文字(例如'ANY_CONSTANT')不是强制性的 - 你也可以传递一个常量(例如PHP_OS)。你必须确保不要将文字与常量混合在一起。

为什么它"工作"对你来说这是一种危险的方法,因为在一种情况下你可能只是忘记了引用,但在另一种情况下,你肯定想要使用常数。因此,PHP会发出通知。