2013-09-05 2 views
3

내가 PHP_INT_MAX 기본 인수로 ~PHP_INT_MAX을 사용되었던 함수를 쓴거야하지만 '~'의 구문 오류가 끝났다으로 ~ PHP_INT_MAX를 사용하는 이유는. 선언은 다음과 같습니다PHP - 그것은 불가능 기본 인수

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

나는 선언에 $lowerbownd = null을하고 몸을 설정하여 고정 지금은 완벽하게 잘 작동 : 즉 왜 그냥

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

궁금 ..

+0

재미 것은 php.net 혼자 _Predefined Constant_로 PHP_INT_MAX (을 의미한다는 것입니다 http://php.net/manual/을 en/reserved.constants.php). 기본 인수 값에 대해서는 기본값이 상수 표현이어야합니다. :) – Smuuf

답변

5

옵션 변수의 기본값은 클래스의 변수 또는 상수의 초기 값과 같이 상수 여야합니다. ~PHP_INT_MAX은 상수가 아니며 표현식입니다. (당신도, 2 + 2 말, 사용할 수 없습니다.) 함수의 매개 변수에 대한

There’s was an RFC relating to this.

+1

PHP.net에서는 '기본값은 a가 아닌 상수 표현식이어야합니다. 변수, 클래스 멤버 또는 함수 호출. – Chris

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'; } 
4

인수의 기본값은 상수 여야합니다. 당신이 ~PHP_INT_MAX를 사용하려면 해당 값을 다른 상수를 정의하고이 상수 사용할 수 있습니다

define('PHP_INT_MIN', ~PHP_INT_MAX); 

public static function isNumberValid($number, $lowerbound = PHP_INT_MIN, $upperbound = PHP_INT_MAX) 
+0

약간 관련 : PHP_INT_MIN과 똑같은 숫자가 [double 형식의 리터럴로 표시되는 이유]가 있습니까? (http://codepad.org/EB40Vy7p) , 정수 대신, 아니면 그냥 PHP에서 버그인가? – JensG

+1

@JensG https://bugs.php.net/bug.php?id=14134에 따라 버그를 수정하지 않습니다. –