常量不能接受进行计算的表达式。为什么我可以用random_int(1,4)声明DEFINE而不出现致命错误?在这种情况下,每次页面加载时常量的值都会不同。这对常量的思想正确吗?
define('RANDOM_NUMBER', random_int(2,4));
这是意识形态问题。为什么在PHP中这是正确的?为何可以在DEFINE中使用表达式,但不能在常量中使用?
答案 0 :(得分:1)
常量不能接受进行计算的表达式。
这不是真的。
define
可以接受第二个参数表达式,包括从被调用函数返回的值。
define value
参数的限制是(来自manual)
值
常数的值。在PHP 5中,值必须是标量值(整数,浮点数,字符串,布尔值或NULL)。在PHP 7中,也接受数组值。
当然,常量不能定义两次。
如果我理解您的问题,这就是常量的“ 意识形态”。
定义它们后,该值就不能在脚本的另一部分中修改,因为它的值是恒定。
当然,如果第二次运行脚本,则常量可以像您的情况那样获得不同的值。
值得一提的是,Class Constants与此不同-您在类定义中使用关键字const
声明的常量。
由于语言设计/规范
该值必须是一个常量表达式,而不是(例如)变量,属性或函数调用。
答案 1 :(得分:0)
由于define
函数仅将random_int(2,4)
的结果作为参数,而无法了解它是随机创建还是确定性创建的。
该程序的真正作用是:
$temp = random_int(2,4);
define("RANDOM_NUMBER", $x);
也就是说,定义用于为请求脚本定义一个常量,而不必为所有请求定义一个常量,因此每个不同的请求对于定义的常量都有不同的值是很有意义的。
答案 2 :(得分:0)
php的官方文档指出:
虽然可以定义资源常数,但不能 建议进行操作,并可能导致无法预测的行为。
这同样适用于分配给DEFINE常量的所有非标量值。 PHP文档指出:
常数的值。在PHP 5中,值必须是标量值 (整数,浮点数,字符串,布尔值或NULL)。在PHP 7中,数组值是 也接受了。