2012-07-22 1 views
1

은 원시 유형 ===!==의 포인트를 얻을 수 없습니다 :PHP와 동일한 비교 연산자를 원시 타입과 함께 사용하는 것은 의미가 있습니까?

$a === $b TRUE if $a is equal to $b, and they are of the same type. 
$a !== $b TRUE if $a is not equal to $b, or they are not of the same type. 

$request->getMethod() 반환 (string 등) GET 또는 POST하고 $form->isValid() 부울 true 또는 false, 다음과 같은 코드를 반환한다고 가정 :

if('POST' === $request->getMethod() || (false === $form->isValid())) : 
endif; 

이 짧은과 관련하여 어떤 의미가 있습니까 하나

if('POST' == $request->getMethod() || !$form->isValid()) : 
endif; 
+0

이러한 유형에 민감한 비교 연산자의 핵심은 PHP의 기본 유형과 관련된 유형 저글링 문제를 해결하는 것입니다. – BoltClock

답변

2

당신은 PHP에서 truty 및 falsy 값이 있습니다. 예를 들어, 0, '', array()은 거짓 값입니다. 당신이 ==를 사용하는 경우는 truty/falsy 값으로이 값을 일치합니다 :

var_dump(true == 'hello'); // true because a not empty string is a truty value 
var_dump(false == 0); // true 

===는 값뿐만 아니라 유형뿐만 아니라 일치합니다 :

var_dump(true === 'hello'); // false, true is a boolean and 'hello' a string 
var_dump(false === 0); // false, false is a boolean and 0 is a string 

이것은 문제가 될 것이다 때 함수 예를 들어 0 또는 false, strpos을 반환 할 수 있습니다.


==에는 다른 요인도 있습니다.당신이 개 다른 유형을 비교한다면 그것은 int에 주조 값을 입력합니다 :

var_dump("123abc" == 123); // true, because '123abc' becomes `123` 

암호를 비교하면이 문제가 될 것입니다 : http://phpsadness.com/sad/47이 필요하지 않을 수도 있지만

1

==은 다른 유형을 비교할 때 가끔 이상한 행동을 보입니다. 예 : 'POST'0과 같은 것으로 간주됩니다. 그렇기 때문에 많은 사람들이 보통 ===을 사용하므로 형식 저글링 문제가 발생하지 않습니다.

귀하의 경우에는 차이가 없어야합니다.

2

때때로 필요합니다. 예를 들어 strpos을 사용하여 문자열이 다른 문자열에 포함되어 있는지 확인하려면 0false을 구별해야합니다.

잘못된 :

if(strpos($haystack,$needle))... 

권리 :

if(strpos($haystack,$needle) !== false)... 
1

,

(false===$form->isValid()) 

!$form->isValid() 

은 전나무와 동일하지 않습니다. t는 $form->isValid()의 값이 false인지 확인하고, 두 번째는 $form->isValid()이 거짓 값인지 확인합니다. 예를 들어 $form->isValid()null을 반환하면 두 번째 것은 true로 평가되고 첫 번째 문은 true로 평가됩니다.

관련 문제