PHP 8에서 새롭게 도입된 str_contains() 함수는 문자열 안에 특정 부분 문자열(substring)이 존재하는지 확인하는 기능을 제공합니다. 이 함수는 첫 번째 인자로 전달된 문자열(대상 문자열)에 두 번째 인자로 전달된 문자열(찾고자 하는 문자열)이 포함되어 있는지 검사하고, 결과를 true 또는 false 불리언(Boolean) 값으로 반환합니다. 함수 이름 그대로 직관적인 의미를 가지고 있어 사용법이 매우 간단합니다.
str_contains(string $haystack, string $needle): bool
예제 1: PHP 8 str_contains() 함수 사용하기
<?php
if (str_contains('great reading tutorial', 'tutorial')) {
var_dump('Tutorial has been found');
}
?>
실행 결과
string(23) "Tutorial has been found"
위 예제에서는 'great reading tutorial'이라는 문자열 안에 'tutorial'이 포함되어 있으므로 조건문이 true를 반환하고, var_dump()가 해당 메시지를 출력합니다.
예제 2: 부분 문자열이 없는 경우
<?php
if (str_contains('great reading tutorial', 'hello')) {
var_dump('great reading');
}
?>
참고: 위 프로그램은 아무것도 출력하지 않습니다. 'great reading tutorial' 문자열에 'hello'라는 부분 문자열이 존재하지 않기 때문에 str_contains() 함수가 false를 반환하기 때문입니다.
PHP 7.x의 strpos() 함수와 비교
PHP 7.x 버전에서는 문자열에 특정 문자열이 포함되어 있는지 확인할 때 strpos() 함수를 사용했습니다. 이 함수는 찾고자 하는 문자열(needle)의 위치(position)를 반환하며, 문자열을 찾지 못한 경우 false를 반환합니다.
if (strpos('string with lots of words', 'words') !== false) { /* ... */ }예제: PHP 7.x strpos() 함수
<?php
$string = 'Hello World!';
if (strpos($string, 'Hello') !== false) {
echo 'True';
}
?>
실행 결과
True
strpos()를 사용할 때 주의할 점은 반환값을 반드시 !== false와 같이 엄격하게 비교해야 한다는 것입니다. strpos()는 문자열이 맨 앞(0번째 위치)에서 발견되면 0을 반환하는데, 느슨한 비교(==)를 사용하면 0과 false가 같다고 판단되어 잘못된 결과가 나올 수 있습니다.
정리
PHP 8의 str_contains() 함수는 기존 strpos() 방식보다 코드의 가독성이 뛰어나고 실수할 가능성도 줄여줍니다. 단순히 문자열 포함 여부만 확인하면 되는 경우라면 str_contains()를 사용하는 것이 권장됩니다. 다만 문자열의 위치 값 자체가 필요한 경우에는 여전히 strpos()를 사용해야 합니다.