说明: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. Go语言的成功也预示着Rust的成功【转】

    从整体的角度来看Go,很难理解他是怎么取得这么大的成功的.从理论的角度上来说Go是一门非常糟糕的语言,就算是和C++或者Ada之类旧语言相比也是这样. 从整体的角度来看Go,很难理解他是怎么取得这么大 ...

  2. sshpass非交互式连接

    $ sshpass -p $passwd ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $USER@$IP 'echo ...

  3. console.log()、console.info()、console.debug()的区别

    onsole.log().console.info().console.debug()的作用都是在浏览器控制台打印信息的. 使用最多的是console.log().console.info()和con ...

  4. asp.net代码审计起始篇之系统搭建

    最近开始学习asp.net的代码审计,在开始审计之前除了要对语言有些基本的了解,还需要会在本地搭建demo网站方便调试和复现漏洞 准备工作:操作系统:我用的是win10 数据库:我用的sql serv ...

  5. Xen虚拟化技术详解---第四章----申请超级调用

    内核驱动程序privcmd负责将位于GuestOS用户空间的超级调用请求传递到GuestOS内核中,与Linux系统的内核驱动程序相同,该操作要在系统调用ioctl()的帮助下完成. 1.关于ioct ...

  6. kubernetes 配置网络插件 flannel

    概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空 ...

  7. 安装folly库以及folly的ConcurrentHashMap的简单使用

    我在写grpc的实例时, 需要使用一个多线程的hash map, C++标准库中没有多线程的hash map, facebook开源的folly中存在大量的基础类, 中间存在一个高性能的hash ma ...

  8. HashMap,HashSet

    HashMap,HashSet 摘自:https://www.cnblogs.com/skywang12345/p/3310887.html#a1 目录 一.    HashMap(键值对形式存取,键 ...

  9. PyQt5入门

    PyQt5 是用来创建Python GUI应用程序的工具包.作为一个跨平台的工具包,PyQt可以在所有主流操作系统上运行(Unix,Windows,Mac). 本文描述Windows系统下如何安装Py ...

  10. 191012 python3关于空格打印、赋值、+=符号的小坑

    1. python3中,直接打印空格不显示,不论是pycharm,cmd命令窗口,还是linux中,都有尝试,但是空格' '不能显示出来: # 打印菱形,只能用center方法for i in ran ...