PHP 문자열 결합하기

이 포스트에서는 PHP에서 문자열 결합하는 방법에 대해 포스팅합니다.

일단 간단한 예제 코드를 서술하자면 다음과 같습니다.

<?php
	$str_a = 'Hello, ';
	$str_b = 'world!';
	echo $str_a . $str_b;
?>

이는 ‘Hello, ’와 ‘world!’를 결합해서 ‘Hello, world!’로 출력하는 예제입니다. 잘 보면 결합될 문자열 사이에 점(.)이 찍혀 있습니다. 다른 프로그래밍 언어에서는 문자열끼리 결합할 때 대부분 덧셈(+) 기호를 쓰지만 PHP에서는 덧셈 기호가 아닌 점으로 문자열을 결합합니다. 다른 프로그래밍 언어에 익숙해져 있다가 PHP를 처음 접할 경우 의외로 헷갈릴 수 있는 부분인데요.

만약 문자열끼리 결합할 때 점을 쓰지 않고 덧셈 기호를 쓴다면 어떻게 될까요?

<?php
	echo '1' + '2' + '3';
?>

이렇게 쓰면 얼핏 보기에는 문자열화된 정수를 문자열로 취급해서 ‘123’으로 결합할 것처럼 보입니다. 하지만, 실제로는 ‘123’이 아닌 ‘6‘이 출력됩니다. PHP에서는 문자열끼리 덧셈 기호를 사용해서 연산을 하면 문자열을 숫자로 해석해서 덧셈을 한 뒤 그 값을 돌려주기 때문입니다. 반면에, 덧셈 기호가 아닌 점을 사용하면 점 앞뒤의 문자열이나 숫자 등을 직접 문자열로 취급해서 결합하는 방식입니다.

그렇기 때문에 PHP에서는 숫자끼리 덧셈을 할 때는 덧셈 기호로, 문자열을 합칠 때는 점으로 구분해서 사용합니다.

다만, 다음과 같은 식으로 덧셈 기호와 점을 혼용하는 것은 가능합니다.

<?php
	echo '1 + 2 + 3 = ' . (1 + 2 + 3);
?>

이렇게 하면 다음과 같이 출력됩니다.

1 + 2 + 3 = 6

이는 먼저 괄호 안의 (1 + 2 + 3)을 먼저 수행해서 6이라는 결과값을 구한 후 그 6과 앞에 있는 ‘1 + 2 + 3 ‘ 사이에 점이 있기 때문에 뒤의 6을 문자열로 취급해서 앞의 ‘1 + 2 + 3 ‘과 결합, ‘1 + 2 + 3 = 6’이라는 문자열을 출력하게 되는 것입니다.

또 다른 예제를 보겠습니다.

<?php
	$str_a = 'Hello,';
	$str_b = 'world!';
	echo $str_a . ' ' . $str_b . '<br />';
	echo "$str_a $str_b <br />";
	echo '$str_a $str_b';
?>

이 코드의 결과는 다음과 같습니다.

Hello, world!
Hello, world!
$str_a $str_b

첫 번째(4번 줄의 결과)는 그냥 문자열끼리 결합한 예이고, 두 번째(5번 줄의 결과)와 세 번째(6번 줄의 결과)는 따옴표 안에 직접 변수 이름을 넣은 예입니다. 첫 번째와 두 번째는 똑같이 ‘Hello, world!’를 출력하지만 세 번째는 그냥 ‘$str_a $str_b’를 출력합니다. 두 번째와 세 번째의 차이는 큰따옴표를 썼느냐 작은따옴표를 썼느냐의 차이인데, 문자열에 큰따옴표를 쓰면 그 안에 있는 변수 이름과 특수문자 등을 파싱해서 변환하는 절차가 이루어지기 때문에 이 예제처럼 "$str_a $str_b"를 파싱해서 앞의 $str_a를 ‘Hello,’로, 뒤의 $str_b를 ‘world!’로 변환하여 “Hello, world!”라는 값을 만들기 때문입니다. 반면, 작은따옴표를 쓰면 이러한 절차가 생략되어 안에 변수 이름을 쓰더라도 그냥 순수한 문자열로 해석해서 그대로 출력하는 것입니다. 따라서, 큰따옴표를 쓰는 것보다 작은따옴표를 쓰는 것이 처리 속도가 미세하게나마 빠릅니다. 문자열에 큰따옴표를 쓸지 작은따옴표를 쓸지는 상황에 따라 결정하는 것이 좋습니다.

답글 남기기

이메일 주소는 공개되지 않습니다.