정의 및 사용 방법
- PHP 버전
- 4+
unset()은 지정한 변수의 설정을 해제합니다.
특징
- 지정한 하나 이상의 변수의 설정을 해제합니다.
- 이렇게 되면 해당 변수가 사용하던 식별자(변수명)는 해제되고,
- 변수와 값의 연결이 끊어집니다.
- 이는 변수가 더 이상 정의되지 않은(undefined) 상태가 됨을 의미합니다.
unset()은 큰 데이터를 가진 변수나 배열을 더 이상 사용하지 않을 때 메모리를 줄이기 위해 주로 사용하며, 코드 명시성, 참조 관리 등에도 사용합니다.
기본 예제
/* 하나의 변수 설정을 해제 */
$a = 10; // 변수 설정
var_dump($a); // int(10)
unset($a); // 변수 해제
var_dump($a); // Warning: Undefined variable $a
/* 여러 개의 변수 설정을 해제 */
$x = 1;
$y = 2;
$z = 3;
unset($x, $y); // $x와 $y 해제
var_dump($x); // Warning: Undefined variable $x
var_dump($y); // Warning: Undefined variable $y
var_dump($z); // int(3) - $z는 그대로 존재
알아두세요!
unset()은 함수처럼 생겼지만 함수가 아닌 언어 구조(language construct)이며, 반환되는 값도 없습니다.
구문
unset(mixed $var, mixed ...$vars): void
$var: 설정을 해제할 변수입니다....$vars: 쉼표(,)를 사용하여 여러 변수를 한 번에 해제할 수 있습니다.
반환 값
없음.
주요 기능
unset()은 변수, 배열 요소, 또는 객체 속성의 설정을 해제하는 데 사용되는 언어 구조(language construct)입니다.
여기서 해제란, 변수명과 값의 연결을 끊고 식별자를 없애는 것을 의미합니다. unset()이 제공하는 주요 기능과 사용 방법을 구체적으로 살펴보겠습니다.
변수 삭제
다음의 예제와 같이 단독 변수에 사용하면 해당 변수를 메모리에서 완전히 제거합니다.
<?php
$data = 'Hello, World!';
echo $data; // 출력: Hello, World!
unset($data);
// 다음 줄은 오류를 발생시킵니다.
echo $data; // Warning: Undefined variable $data
객체 속성 삭제
unset($object->property)와 같이 객체의 특정 속성을 제거할 수 있습니다.
class User {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$user = new User('John Doe', 30);
print_r($user);
// 출력: User Object ( [name] => John Doe [age] => 30 )
unset($user->age); // age 속성 제거
print_r($user);
// 출력: User Object ( [name] => John Doe )
배열 요소 제거
unset($array['key']) 또는 unset($array[index])와 같이 배열의 특정 키 또는 인덱스에 사용하면 해당 요소만 삭제하고 배열의 나머지 부분은 그대로 유지됩니다.
배열의 중간 요소를 삭제하면 해당 인덱스는 존재하지 않는 상태가 되며 자동으로 재배열되지 않습니다.
예를 들어, [0, 1, 2, 3]에서 unset($array[1])을 실행하면 [0, 2, 3]이 되지만, 인덱스 1은 더 이상 존재하지 않습니다.
$array = [0, 1, 2, 3];
unset($array[1]); // 인덱스 1 삭제
print_r($array);
/*
결과:
Array
(
[0] => 0
[2] => 2
[3] => 3
)
*/
unset()으로 배열의 특정 요소를 제거하는 것은 주의가 필요하므로, 권장하지 않습니다.
참조 변수
$a = 50;
$b = &$a; // $b가 $a를 참조
unset($b); // $b만 해제
var_dump(isset($a)); // bool(true) - $a는 여전히 존재
var_dump(isset($b)); // bool(false) - $b는 해제됨
$a = 100;
echo $a; // 100
함수 내에서 전역 변수의 삭제
함수 내부에서 전역 변수를 unset()으로 삭제하려면 $GLOBALS 배열을 사용합니다.
$a = 10;
function test() {
unset($a); // 함수 내부의 로컬 $a만 영향
var_dump(isset($GLOBALS['a'])); // bool(true)
unset($GLOBALS['a']); // 전역 변수 삭제
}
test();
var_dump(isset($a)); // bool(false)
정적(static) 변수 삭제 규칙
함수 내부에서 선언된 정적(static) 변수는 함수 호출 간에도 값을 유지합니다.
unset()을 사용해도 정적 변수의 값은 삭제되지 않고, 변수명만 로컬에서 제거되는 경우가 있습니다. 따라서 정적 변수는 unset()으로 완전히 제거되지 않는다는 점을 알아두어야 합니다.
function counter() {
static $count = 0;
$count++;
var_dump($count);
unset($count); // 정적 변수의 값을 완전히 제거하지 못함
}
counter(); // int(1)
counter(); // int(2) - $count는 여전히 존재