# unset

(PHP 4, PHP 5, PHP 7, PHP 8)

unset — unset() 指定变量

### 说明

unset(mixed `$var`, mixed `...$vars`): void

unset() 销毁指定变量。

unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。

如果在函数中 unset() 一个全局变量，则只是局部变量被销毁，而在调用环境中的变量将保持调用 unset() 之前一样的值。

示例 #1 使用 unset()

`<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;
?>`

如果您想在函数中 unset() 一个全局变量，可使用 $GLOBALS 数组来实现：

示例 #2 unset() 全局变量

`<?php
function foo()
{
unset($GLOBALS['bar']);
}
$bar = "something";
foo();
?>`

如果在函数中 unset() 一个通过引用传递的变量，则只是局部变量被销毁，而在调用环境中的变量将保持调用 unset() 之前一样的值。

示例 #3 unset() 引用

`<?php
function foo(&$bar)
{
unset($bar);
$bar = "blah";
}
$bar = 'something';
echo "$bar\n";
foo($bar);
echo "$bar\n";
?>`

如果在函数中 unset() 一个静态变量，那么在函数内部此静态变量将被销毁。但是，当再次调用此函数时，此静态变量将被复原为上次被销毁之前的值。

示例 #4 unset() 静态变量

`<?php
function foo()
{
static $bar;
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = 23;
echo "after unset: $bar\n";
}
foo();
foo();
foo();
?>`

### 参数

`var`

  要销毁的变量。

`vars`

  更多变量。

### 返回值

没有返回值。

### 示例

示例 #5 unset() 示例

`<?php
// 销毁单个变量
unset($foo);
// 销毁单个数组元素
unset($bar['quux']);
// 销毁一个以上的变量
unset($foo1, $foo2, $foo3);
?>`

### 注释

> 注意: 因为是语言构造器而不是函数，不能被 可变函数 或者 命名参数 调用。

> 注意:

> 它可以取消设置当前上下文中可见的对象属性。

> 如果已声明，则在访问未设置的属性时调用 __get()， 在设置未设置的属性时调用 __set()。

> 注意:

> 无法在对象里销毁 `$this`。

> 注意:

> 在 unset() 一个无法访问的对象属性时，如果定义了 __unset() 则会调用这个重载方法。

### 参见

- isset() - 检测变量是否已声明并且其值不为 null
- empty() - 检查变量是否为空
- __unset()
- array_splice() - 去掉数组中的某一部分并用其它值取代
- (unset) 强制转换

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open