为什么PHP中的DEFINE可以接受随机值?

时间:2018-08-10 15:22:27

标签: php constants

常量不能接受进行计算的表达式。为什么我可以用random_int(1,4)声明DEFINE而不出现致命错误?在这种情况下,每次页面加载时常量的值都会不同。这对常量的思想正确吗?

define('RANDOM_NUMBER', random_int(2,4));

这是意识形态问题。为什么在PHP中这是正确的?为何可以在DEFINE中使用表达式,但不能在常量中使用?

3 个答案:

答案 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中,数组值是   也接受了。