할당 연산자

할당 연산자

값을 변수에 넣는 할당 연산자와, 계산과 할당을 한 번에 해주는 복합 할당 연산자를 알아봅니다.

출처: Assignment

본문

기본 할당 연산자는 "="예요. 처음에는 이걸 "같다(equal to)"라고 생각하기 쉬운데, 그렇게 보면 안 돼요. 이 연산자는 왼쪽 피연산자가 오른쪽 표현식의 값으로 설정된다(get set to)는 뜻입니다.

할당 표현식의 값은 할당된 값이에요. 즉 "$a = 3"의 값은 3입니다. 이 덕분에 몇 가지 깔끔한 일을 할 수 있어요:

<?php
$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.
var_dump($a);
?>

기본 할당 연산자 외에도 모든 이항 산술, 배열 합집합, 문자열 연산자에는 "결합 연산자"가 있어요. 어떤 값 하나를 표현식 안에서 사용하고 난 뒤, 그 값이 그 표현식의 결과로 설정되게 해주죠. 예를 들어:

<?php
$a = 3;
$a += 5; // sets $a to 8, as if we had said: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!";

var_dump($a, $b);
?>

할당은 원래 변수를 새 변수로 복사한다는 점(값에 의한 할당)을 주의하세요. 그래서 한쪽을 바꿔도 다른 쪽은 영향을 받지 않아요. 빡빡한 반복문 안에서 큰 배열 같은 걸 복사해야 할 때도 이 사실이 중요해요.

PHP에서 평소의 값에 의한 할당 동작에 예외가 있는데, 바로 객체예요. 객체는 참조로 할당됩니다. 객체를 명시적으로 복사하려면 clone 키워드를 쓸 수 있어요.

참조에 의한 할당

참조에 의한 할당도 지원되며, "$var = &$othervar;" 문법을 사용해요. 참조에 의한 할당은 두 변수가 결국 같은 데이터를 가리키게 된다는 뜻이고, 어떤 것도 복사되지 않습니다.

<?php
$a = 3;
$b = &$a; // $b is a reference to $a

print "$a\n"; // prints 3
print "$b\n"; // prints 3

$a = 4; // change $a

print "$a\n"; // prints 4
print "$b\n"; // prints 4 as well, since $b is a reference to $a, which has
              // been changed
?>

new 연산자는 자동으로 참조를 반환하므로, new의 결과를 참조로 할당하는 것은 오류예요.

<?php
class C {}

$o = &new C;
?>

Parse error: syntax error, unexpected token ";", expecting "("

참조와 그 잠재적 용도에 대한 자세한 내용은 매뉴얼의 References Explained 섹션에서 찾을 수 있어요.

산술 할당 연산자

예제 동등 표현 연산
$a += $b $a = $a + $b 덧셈
$a -= $b $a = $a - $b 뺄셈
$a *= $b $a = $a * $b 곱셈
$a /= $b $a = $a / $b 나눗셈
$a %= $b $a = $a % $b 나머지
$a **= $b $a = $a ** $b 거듭제곱

비트 할당 연산자

예제 동등 표현 연산
$a &= $b $a = $a & $b 비트 AND
`$a = $b` `$a = $a
$a ^= $b $a = $a ^ $b 비트 XOR
$a <<= $b $a = $a << $b 왼쪽 시프트
$a >>= $b $a = $a >> $b 오른쪽 시프트

기타 할당 연산자

예제 동등 표현 연산
$a .= $b $a = $a . $b 문자열 결합
$a ??= $b $a = $a ?? $b 널 병합

참고

  • 산술 연산자
  • 비트 연산자
  • 널 병합 연산자

더 알아보기