我写了一个函数,其中我使用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;
}
我只是想知道为什么会这样......
答案 0 :(得分:5)
可选变量的默认值必须是常量,例如,类中变量或常量的初始值。 ~PHP_INT_MAX
不是常数,而是表达式。 (你也不能使用2 + 2
。)
答案 1 :(得分:4)
参数的默认值必须是常量。如果要使用~PHP_INT_MAX
,可以使用该值定义另一个常量并使用此常量:
define('PHP_INT_MIN', ~PHP_INT_MAX);
public static function isNumberValid($number, $lowerbound = PHP_INT_MIN, $upperbound = PHP_INT_MAX)
答案 2 :(得分: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'; }