PHP는 산술 연산, 문자열 연결, 값 비교, 불리언 연산 등 다양한 작업을 수행할 수 있도록 여러 종류의 연산자를 제공합니다. 이번 글에서는 그중에서도 PHP가 지원하는 문자열 연산자(string operator)에 대해 자세히 알아보겠습니다.
PHP 문자열 연산자의 종류
PHP는 두 가지 문자열 연산자를 제공합니다.
1. 연결 연산자(Concatenation Operator, ".")
두 개의 문자열 값을 하나로 결합하여 새로운 문자열로 반환합니다.
2. 연결 대입 연산자(Concatenating Assignment Operator, ".=")
오른쪽 피연산자를 왼쪽 피연산자 뒤에 덧붙이는 연산을 수행합니다.
다음 예제들을 통해 위 연산자들의 활용법을 직접 확인해 보겠습니다.
예제 1: 연결 연산자(.) 사용하기
<?php $a = 'Good'; $b = 'Morning'; $c = $a . $b; echo " $c "; ?>
출력 결과:
Goodmorning
설명:
변수 $a와 $b에 각각 문자열을 저장한 뒤, 연결 연산자(.)를 사용해 두 문자열을 하나로 합쳤습니다. 두 문자열 사이에 공백이 없기 때문에 결과가 "Goodmorning"처럼 그대로 이어져 출력됩니다.
예제 2: 연결 대입 연산자(.=)와 배열 활용하기
<?php
$a = 'Hello';
$b = [" Good morning", " Folks"];
for ($i = count($b) - 1; $i >= 0; $i--) {
$a .= $b[$i];
}
echo " $a";
?>출력 결과:
Hello Folks Good morning
설명:
이 예제에서는 연결 대입 연산자(.=)를 사용해 문자열과 배열 값을 연결했습니다. $a는 문자열, $b는 배열이며, for 반복문을 통해 배열 $b의 요소를 뒤에서부터 하나씩 문자열 $a에 덧붙여 최종적으로 "Hello Folks Good morning"이라는 문장을 완성했습니다.
주의: 연산자 우선순위로 인한 예상치 못한 결과
연결 연산자(.)는 산술 연산자인 "+" 및 "-"와 우선순위가 같기 때문에, 의도와 다른 결과가 나올 수 있습니다.
잘못된 사용 예:
<?php $val = 5; echo "Result: " . $val + 5; ?>
출력 결과:
5
설명:
위 코드는 "Result: 10"이 아니라 "5"를 출력합니다. 먼저 "Result: 5"라는 문자열이 생성된 후 숫자 5가 더해지는데, 이때 숫자가 아닌 비어 있지 않은 문자열은 0으로 변환되므로 0 + 5 = 5가 되는 것입니다.
원하는 결과인 "Result: 10"을 출력하려면 괄호를 사용해 연산 우선순위를 명확하게 지정해야 합니다.
올바른 사용 예:
<?php $var = 5; echo "Result: " . ($var + 5); ?>
출력 결과:
Result:10
참고: PHP 8부터 달라진 연산자 우선순위
PHP 7.x 버전까지는 연결 연산자(.)가 "+", "-"와 동일한 우선순위를 가졌지만, PHP 8부터는 연결 연산자의 우선순위가 산술 연산자보다 낮아졌습니다. 따라서 PHP 8 이상 환경에서는 위와 같은 코드가 다르게 해석될 수 있습니다. 혼란을 피하려면 연결 연산자와 산술 연산자를 함께 사용할 때 항상 괄호로 묶어주는 습관을 들이는 것이 좋습니다.