정의 및 사용 방법
- 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는 여전히 존재