PHP的文档描述了define()
函数,其常量名称为字符串。所以它应该在引号中:
define('ANY_CONSTANT',1);
但是我看到很多没有这样的引号的例子:
define(ANY_CONSTANT,1);
我还在online PHP tester中测试了两种方式,并且都正常工作。
任何人都可以解释一下:这两种方法有什么区别吗?这些更好吗?在哪种情况下?
答案 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会发出通知。