PHP 프로그래밍에서 Stripos 함수는 매우 일반적인 문자열 조작 기능입니다. 문자열이 먼저 다른 문자열로 나타나는 위치를 찾는 데 사용되며 대소 문자를 사용하지 않습니다. 사용량은 일반적으로 다음과 같습니다.
stripos($haystack, $needle);
$ haystack 이 검색 할 문자열이고 $ 니들은 당신이 찾고있는 부분 문자열입니다. $ 니들이 발견되면 $ haystack 에서 하위 문자열의 위치를 반환하고 그렇지 않으면 False가 반환됩니다.
스위치 문은 일련의 가능한 분기 판단을 수행하는 데 사용되며, 일반적으로 상수, 숫자 또는 문자열의 정확한 일치에 의존합니다. PHP 전통적인 스위치 문은 Stripos를 사용하여 문자열 일치를 직접 지원하지 않습니다.
이 간단한 코드 예제를 고려하십시오.
<?php
$searchString = "Hello World";
switch (stripos($searchString, "hello")) {
case 0:
echo "Found 'hello' at the start!";
break;
case false:
echo "'hello' not found!";
break;
default:
echo "Found 'hello' at position " . stripos($searchString, "hello");
}
?>
표면에서는 Stripos가 정수 ( 서브 스트링의 위치를 나타내는) 또는 False를 반환하기 때문에 제대로 작동하는 것 같습니다. 그러나 실제로 몇 가지 문제가 있습니다.
스위치 문은 조건을 판단 할 때 유형 변환을 수행합니다. 즉, Stripos가 0과 같은 정수를 반환하면 (하위 문자열이 문자열의 시작 부분에 있음을 의미합니다) False 로 처리됩니다. PHP에서 0은 부울 거짓으로 간주되므로 스위치 명령문에서 사례 0 : Case False 와 충돌하여 올바르게 일치하지 않을 수 있습니다.
구체적으로, stripos 에 의해 반환 된 0은 스위치 에 의해 부울 거짓 으로 변환되며, 이는 조건부 지점 판단 오류로 이어질 것입니다.
이 문제를 피하기 위해 명시 적 유형 검사를 사용하여 Stripos가 반환 한 값이 혼란스럽지 않도록 할 수 있습니다. 예를 들어, 엄격한 비교에 ===를 사용할 수 있거나 먼저 Stripos가 False를 반환 한 다음 지점 판단을 결정할 수 있습니다.
개선 된 버전은 다음과 같습니다.
<?php
$searchString = "Hello World";
$position = stripos($searchString, "hello");
if ($position === false) {
echo "'hello' not found!";
} elseif ($position === 0) {
echo "Found 'hello' at the start!";
} else {
echo "Found 'hello' at position " . $position;
}
?>
스위치는 유형 변환을 수행하고 Stripos 에 의해 반환 된 0은 False 로 오인되어 판단 오류가 발생하기 때문에 StripoS는 스위치 문에서 직접 사용할 수 없습니다. 이 문제를 피하려면 스위치 대신 IF 문을 사용하고 엄격한 유형 비교를 수행하는 것이 좋습니다.