2013-10-17 1 views
0

누군가 이런 일이 일어나는 이유를 이해할 수 있도록 도와 줄 수 있습니까?알 수없는 유형이 0인지 확인하는 가장 안전한 방법은 무엇입니까? 왜 float (0)이 (int) 0이 아닌지?

float(0) 
int(0) 
bool(false) 

내가 정말 거대한 빨간색 경고 here 알고있다 왜 이해하지 않지만, 0이 안 0 :

$zero = (float)0; 
var_dump($zero); 
var_dump(0); 
var_dump(($zero === 0)); 

이 생산? 또는 PHP 실제로 변수 형식 (부동 소수점에 대해) 비교 무엇입니까?

그런 경우를 가정하면 숫자가 정확한 유형을 모르는 경우 0이 아닌지 확인하는 가장 안전한 방법은 무엇입니까?

감사합니다.

답변

1

int(0)===을 사용할 때 값뿐만 아니라 유형도 비교됩니다. 이 경우 값은 같지만 유형이 다르므로 false입니다. 해당 값은 Equal이지만 Identical은 아닙니다.

int(0) == float(0) // true because only value is compared, which is same. 
int(0) === float (0) // false because even though value is same, type is also compared, which is different 

$ A === $으로 B를 $ a가 $ b가 같고, 같은 유형의 경우 '동일'TRUE.
$ a == $ b 유형이 저글링 된 후 $ a가 $ b와 같으면 '같음'TRUE입니다.

Reference:

좋은 방법은 변수의 숫자 값이 0이 될 수 있는지 여부를 테스트하기 :

if (intval($zero)==0) 
{ 
    // $zero is 0 in numeric terms. You can even send it a string to test, which will be 0 
} 

읽기 http://php.net/manual/en/types.comparisons.php

0

=== 값뿐만 아니라 입력 비교합니다. 그냥 값을 비교하려는 경우

$zero = (float)0; 
var_dump($zero); 
var_dump(0); 
var_dump(($zero === 0)); 
var_dump(($zero == 0)); 

0

그것이 ===는 비교 있기 때문에 (사실) (0) INT (0) 부울 (false)를 부울 플로트를 반환합니다 ==를 사용 유형 및 값과 비교 만이 == ==

$foo = 0; 

var_dump((float)$foo==(int)$foo); //Produces true 

var_dump((float)$foo===(int)$foo); //Produces false 
0

실제로 두 비교 연산자

되는 값들이 값의 동일성 만 검사합니다.

=== 유형과 값이 동일한 지 확인합니다.

관련 문제