PHP - 为什么不能使用 ~PHP_INT_MAX 作为默认参数


PHP - Why is it not possible to use ~PHP_INT_MAX as a default argument

我写了一个函数,其中我使用 PHP_INT_MAX~PHP_INT_MAX 作为默认参数,但我最终得到了"~"的语法错误。声明是:

public static function isNumberValid($number, $lowerbound = ~PHP_INT_MAX, $upperbound = PHP_INT_MAX)

我通过在声明中$lowerbownd = null然后将其设置在正文中来修复它,现在它工作得很好:

if (is_null($lowerbound)){
    $lowerbound = ~PHP_INT_MAX;
}

我只是想知道为什么会这样..

可选变量的默认值必须是常量,例如变量的初始值或类中的常量。 ~PHP_INT_MAX不是一个常量,而是一个表达式。(你也不能使用,比如说,2 + 2

有一个与此相关的RFC。

参数的默认值必须是常量。如果要使用 ~PHP_INT_MAX可以使用该值定义另一个常量并使用此常量:

define('PHP_INT_MIN', ~PHP_INT_MAX);
public static function isNumberValid($number, $lowerbound = PHP_INT_MIN, $upperbound = PHP_INT_MAX)

函数参数的默认值必须是常量值。它们不能是表达式。即使 PHP_INT_MAX 是编译值并立即可供编译器使用,您仍然通过执行按位 NOT 操作将其转换为表达式。

function foo ($x = PHP_INT_MAX) { echo 'this is ok'; }
function bar ($x = ~PHP_INT_MAX) { echo 'this is NOT ok'; }