说明:unset ( mixed $var [, mixed $... ] ) : void

unset() 销毁指定的变量。

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

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

例子

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

在函数中销毁全局变量

<?php
function destroy_foo() {
global $foo;
unset($foo);//在函数中销毁,只是函数中的局部变量被销毁,在函数外部依然可以使用
} $foo = 'bar';
destroy_foo();
echo "$foo\n";
?>

输出

bar

在函数中为全局变量赋值(此时修改了全局变量的值)

<?php
function destroy_foo() {
global $foo;
$foo="hello";//全局变量被修改为hello
unset($foo); //在函数中销毁的是局部变量
}
$foo = 'bar';
destroy_foo();
echo "$foo\n";
?>

输出

hello

在函数中先重置全局变量再赋值,此时赋值的是局部变量

<?php
function destroy_foo() {
global $foo;
unset($foo); //在函数中销毁的是局部变量
$foo="hello";//局部变量
}
$foo = 'bar';
destroy_foo();
echo "$foo\n";
?>

输出

bar

在外部销毁变量,再输出这个变量,会提示这个变量没有定义

<?php
function destroy_foo() {
global $foo;
unset($foo);
$foo="hello";
}
$foo = 'bar';
destroy_foo();
unset($foo);
echo "$foo\n";
?>

输出

PHP Notice:  Undefined variable: foo in /Users/macname/testc/test.php on line 

在函数中销毁全局变量

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

输出

something
PHP Notice: Undefined variable: bar in /Users/macname/testc/test.php on line

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

<?php
function foo(&$bar) {
unset($bar);// 销毁的是局部变量
$bar = "blah";// 局部变量
} $bar = 'something';
echo "$bar\n"; foo($bar);
echo "$bar\n";
?>

输出

something
something

通过引用修改全局变量

<?php
function foo(&$bar) {
$bar = "blah"; //全局变量重新赋值
unset($bar); //销毁的是局部变量
} $bar = 'something';
echo "$bar\n"; foo($bar);
echo "$bar\n";
?>

输出

something
blah

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

<?php
function foo()
{
static $bar; //静态变量
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = ; //局部变量
echo "after unset: $bar\n";
} foo();//被销毁前的值是1
foo();//被销毁前的值是2
foo();//被销毁前的值是3
?>

输出

Before unset: , after unset:
Before unset: , after unset:
Before unset: , after unset:

参考:

https://www.php.net/manual/zh/function.unset.php

php unset的更多相关文章

  1. PHP unset()函数销毁变量 但没有实现释放内存

    <?PHP $a = "hello";$b = &$a;unset( $b );echo $a; // 输出 helloecho $b; // 报错$b = &quo ...

  2. is_null, empty, isset, unset对比

    is_null, empty, isset, unset 我们先来看看这4个函数的描述 isset 判断变量是否已存在(配置)unset 把变量删除(释放)掉empty 判断变量是否为空is_null ...

  3. PHP unset销毁变量并释放内存

    PHP的unset()函数用来清除.销毁变量,不用的变量,我们可以用unset()将它销毁.但是某些时候,用unset()却无法达到销毁变量占用的内存!我们先看一个例子: <?php $s=st ...

  4. 11月1日上午PHP------empty、 is_null、isset、unset的区别

    1.empty 判断一个变量是否为"空".null.false.00.0.'0′.』.为以上值的变量在检测時都将返回true. 2.isset 判断一个变量是否已经设置.0.00. ...

  5. 如何删除PHP数组中的元素,并且索引重排(unset,array_splice)?

    如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); pri ...

  6. initial、inherit、unset、revert和all

    前面的话 在CSS中,有4个关键字理论上可以应用于任何的CSS属性,它们是initial(初始).inherit(继承).unset(未设置).revert(还原).而all的取值只能是以上这4个关键 ...

  7. git push.default is unset

    warning: push.default is unset; its implicit value is changing inGit 2.0 from 'matching' to 'simple' ...

  8. mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)

    主从复制:http://blog.csdn.net/drifterj/article/details/7833883 对于文档的更新除替换外,针对某个或多个文档只需要部分更新可使用原子的更新修改器,能 ...

  9. PHP如何释放内存之unset销毁变量并释放内存详解

    PHP的unset()函数用来清除.销毁变量,不用的变量,我们可以用unset()将它销毁.但是某些时候,用unset()却无法达到销毁变量占用的内存!我们先看一个例子: <?php $s = ...

  10. php foreach循环中unset后续的键值问题

    实例: $arr=array('a','b','c','d','e','f'); foreach($arr as $index=>$tmp){ echo $index.'=>'.$tmp. ...

随机推荐

  1. 一个 Vim 重度用户总结的 vim 超全指南

    我本人是 Vim 的重度使用者,就因为喜欢上这种双手不离键盘就可以操控一切的feel,Vim 可以让我对文本的操作更加精准.高效. 对于未使用过 Vim 的朋友来说,可能还无法体会到这种感觉.由于使用 ...

  2. 【洛谷 P4688】 [Ynoi2016]掉进兔子洞(bitset,莫队)

    题目链接 第一道Ynoi 显然每次询问的答案为三个区间的长度和减去公共数字个数*3. 如果是公共数字种数的话就能用莫队+bitset存每个区间的状态,然后3个区间按位与就行了. 但现在是个数,bits ...

  3. centos安装docker以及docker-compose

    1.yum更新 # sudo yum update 2.如果安装docker旧版本,旧版本的卸载 # sudo yum remove docker docker-common docker-selin ...

  4. NameError: name “ ” is not defined

    NameError: name “ ” is not defined 问题一:name ‘name’ is not defined "name"两端是双下划线"_&quo ...

  5. HTML—链接

    怎么看都觉得链接太神奇了,尤其是创建电子邮件的链接,于是决定单独写一篇关于HTML链接的内容,同时加深记忆 一.首先,超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,通过点击这些内容来跳转到 ...

  6. django admin日期变为可以修改

    Django - 日期.时间字段   阅读目录 DateTimeField.auto_now DateTimeField.auto_now_add admin中的日期时间字段 如何将创建时间设置为“默 ...

  7. js 判断数组中是否包含某个元素(转载)

    来源:https://www.cnblogs.com/yunshangwuyou/p/10539090.html 方法一:array.indexOf(item,start):元素在数组中的位置,如果没 ...

  8. 使用gdb调试应用程序

    目录 一.gdb基本使用 1. 启动gdb 2. gdb交互式命令 一.gdb基本使用 ​ GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. ...

  9. python之PEP8规范

    比较需要注意的 缩进 每一级缩进使用4个空格. 续行应该与其包裹元素对齐,要么使用圆括号.方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐3.当使用挂行缩进时,应该考虑到第一行不应该有参数 ...

  10. 常见的监控JVM的几个Linux命令和使用

    jps [root@xxx bin]# jps -l 2007bash: jps: command not found [root@xxx bin]# /opt/jdk1.8.0_181/bin/jp ...