说明: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. 【一起学源码-微服务】Netflix Eureka 源码一:Netflix Eureka 源码初探,我们为什么要读源码?

    前言 最近发现 网上好多自己的博客,很多朋友转载了文章却不加下 原载地址,本文欢迎转载一起学习,请在目录出加上原出处,感谢.转载来自:博客(一枝花算不算浪漫) 看了前面几篇文章的小伙伴知道,前几天在学 ...

  2. buffer和cache区别?

    写入数据到内存里,这个数据的内存空间称为缓冲区(buffer) 从内存读取数据,这个存储数据的内存空间称为缓存区(cache) 由于大部分网站以读取为主,写入为辅,所以并发写入一般不是问题.

  3. 将excel中的数据转为json格式

    ---恢复内容开始--- 用来总结工作中碰导一些错误,可以让自己在碰到相同错误的时候不至于重新走一遍.... 昨天导入数据的时候,碰到了一个问题是将一个大数组里面的每一个元素中的一些不要的去提出掉,本 ...

  4. Metasploit3

    1.之前使用的版本是Metasploit2的版本操作系统是基于Ubuntu的,渗透测测试模块也是基于metasploit的,基本上没有设置,Metasploitable3添加了很多安全机制 ,防火墙和 ...

  5. DevOps简介_转

    转自:DevOps简介     刘大飞 DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI).持续部署(CD)为基础,来优化程式开发.测试.系统运维等所有环节. Dev ...

  6. my.cnf参数说明

    MySQL 5.7数据库参数优化 连接相关参数 max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000 max_connect_errors: ...

  7. vmware联网解决方案:host-only共享上网

    一.需求说明 vmware通过桥接的方式可以上外网,但是虚拟机的IP地址必须和物理网卡在同一网段,上网环境不同虚拟机必须跟着换ip地址很麻烦,所以最好是采用host-only方式上网. 特别是做架构实 ...

  8. centos7安装nginx 并启动

    原文连接  https://www.cnblogs.com/jerrypro/p/7062101.html 一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先 ...

  9. Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学

    Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学 [Problem Description] ...

  10. Kotlin星投影与泛型约束详解

    星投影(star projection): 继续来学习Kotlin泛型相关的东东,星投影(star projection),这是个啥东东呢?下面先来说一下概念: 1.对于Star<out T&g ...