unset 指定变量

# unset

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

unset — unset() 指定变量

### 说明

function 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