줄에서 엄격한 비교를 사용해야합니까?
-
16-09-2019 - |
문제
예를 들어 다음과 같이 알고 있습니다.
if (in_array('...'), array('.', '..', '...') === true)
위에:
if (in_array('...'), array('.', '..', '...') == true)
성능을 높이고 몇 가지 일반적인 실수 (예 : 1 == True)를 피할 수 있지만, 문자열에 대한 엄격한 비교를 사용해야 할 이유가 있는지 궁금합니다.
if ('...' === '...')
똑같은 일을하는 것 같습니다.
if ('...' == '...')
누군가이 주제에 약간의 빛을 가져올 수 있다면 감사합니다.
해결책
두 값이 모두 문자열임을 보장한다는 것을 알고 있다면 ==
그리고 ===
둘 사이의 유일한 차이점은 ===
유형이 효과적인 값뿐만 아니라 유형이 동일인지 확인합니다.
그러나 경우에 따라 값이 문자열이 될 것임 (예 : $ _get 및 $ _post 변수와 같은 것과 같은 문자열이 될 것임을 알 수 없습니다. 다음을 고려하세요:
$_GET['foo'] == ""
위의 표현식은 True If로 평가됩니다 foo
빈 문자열로 전달되었지만 True로 평가할 것입니다. 가치가 전달되지 않았습니다 foo
조금도. 대조적으로,
$_GET['foo'] === ""
빈 문자열이 명시 적으로 통과 된 경우에만 TRUE를 평가합니다. $_GET['foo']
빈 문자열과 동일 할 수 있지만 유형은 실제로 문자열이 아닌 해당 인덱스의 빈 값이기 때문에 그렇지 않습니다.
다른 팁
하나 또는 다른 하나를 사용할 수있는 경우 : 엄격한 비교를 선택하십시오.
- 성능이 향상됩니다
- 예상치 못한 결과를 방지합니다
문자열을 비교할 때는 문자열이 비어 있거나 변수가 실제로는 그렇지 않다고 생각하기 때문에 여전히 예상치 못한 결과를 얻을 수 있습니다.
항상 true 또는 false로 줄일 수 있기 때문에 두 개의 문자열 리터럴 비교를 사용하지 않습니다. 예를 들어:
if ('...' === '...')
와 같다
if (TRUE)
따라서 항상 하나 이상의 변수를 비교하기 때문에 예기치 않은 결과를 얻을 수 있다고 가정해야합니다.
다양한 엄격한 것과 느슨한 비교의 벤치 마크 결과를 볼 수 있습니다. http://net-beta.net/ubench/. 나는 또한 내 자신의 테스트를 실행했고 같은 결과를 발견했습니다.
이것은 마이크로 최적화이므로 기존 코드가 눈에 띄는 차이를 만들지 않기 때문에 기존 코드를 변경하지 않아야하지만 새 코드를 작성하는 경우 가장 효율적인 기술을 사용하여 연습 할 수도 있습니다.