3

我写了一个函数,我在其中使用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;
}

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

4

3 回答 3

5

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

有一个与此相关RFC。

于 2013-09-05T18:30:25.910 回答
4

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

define('PHP_INT_MIN', ~PHP_INT_MAX);

public static function isNumberValid($number, $lowerbound = PHP_INT_MIN, $upperbound = PHP_INT_MAX)
于 2013-09-05T18:34:29.713 回答
2

函数参数的默认值必须是一个常数值。它们不能是一种表达。即使 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'; }
于 2013-09-05T18:31:55.970 回答