PHP unset函数原理及使用方法解析
unset—释放给定的变量
说明
unset(mixed$var[,mixed$...] ) :void
unset()销毁指定的变量。
unset()在函数中的行为会依赖于想要销毁的变量的类型而有所不同。
如果在函数中unset()一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用unset()之前一样的值。
<?php function destroy_foo() { global $foo; unset($foo); } $foo = 'bar'; destroy_foo(); echo $foo; ?>
以上例程会输出:
bar
如果您想在函数中unset()一个全局变量,可使用$GLOBALS数组来实现:
<?php function foo() { unset($GLOBALS['bar']); } $bar = "something"; foo(); ?>
如果在函数中unset()一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用unset()之前一样的值。
<?php function foo(&$bar) { unset($bar); $bar = "blah"; } $bar = 'something'; echo "$barn"; foo($bar); echo "$barn"; ?>
以上例程会输出:
something
something
如果在函数中unset()一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。
<?php function foo() { static $bar; $bar++; echo "Before unset: $bar, "; unset($bar); $bar = 23; echo "after unset: $barn"; } foo(); foo(); foo(); ?>
以上例程会输出:
Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23
参数
var
要销毁的变量。
...
其他变量……
返回值
没有返回值。
范例
Example #1unset()示例
<?php
// 销毁单个变量
unset ($foo);// 销毁单个数组元素
unset ($bar['quux']);// 销毁一个以上的变量
unset($foo1, $foo2, $foo3);
?>
Example #2 使用(unset)类型强制转换
(unset)类型强制转换常常和函数unset()引起困惑。 为了完整性,(unset)是作为一个NULL类型的强制转换。它不会改变变量的类型。
<?php
$name = 'Felipe';var_dump((unset) $name);
var_dump($name);
?>
以上例程会输出:
NULL
string(6) "Felipe"
注释
- Note:因为是一个语言构造器而不是一个函数,不能被可变函数调用。
- It is possible to unset even object properties visible in current context.
- 在 PHP 5 之前无法在对象里销毁$this。
- 在unset()一个无法访问的对象属性时,如果定义了__unset()则对调用这个重载方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
解析PHP中的unset究竟会不会释放内存
首先让我们看一个例子 复制代码 代码如下: var_dump(memory_get_usage()); $a = "laruence"; var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage()); 输出(在我的个人电脑上, 可能会因为系统,PHP版本,载入的扩展不同而不同): int(90440) int(90640) int(90472 注意到 90472-90
-
PHP中unset,array_splice删除数组中元素的区别
如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); print_r($arr); ?> 结果是: Array ( [0] => a [2] => c [3] => d ) 那么怎么才能做到缺少的元素会被填补并且数组会被重新索引呢?答案是array_splice(): <?php $arr = array('a','b','c','d
-
php使用unset()删除数组中某个单元(键)的方法
本文实例讲述了php使用unset()删除数组中某个单元(键)的方法.分享给大家供大家参考.具体分析如下: unset既可以删除变量,也可以删除数组中某个单元.但要注意的是,数组不会重建索引. 实例如下: <?php $arr = array("朝阳区","海淀区","西城区","东城区","丰台区"); unset($arr[3]); echo "<pre>"; pr
-
PHP中删除变量时unset()和null的区别分析
第一种方法:$varname=null 第二种方法:unset($varname) 这两种方法都可以删除变量,但结果有些许的差别. 代码: 复制代码 代码如下: <?php $a = array( 'a' => 'a', 'b' => 'b' ); $b = array( 'a' => 'a', 'b' => 'b' ); $a['b'] = null; unset($b['b']); print('<pre>'); print_r($a); print('<
-
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
10.__set() __get() __isset() __unset()四个方法的应用 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数"__get()"和"__set()"来获 取和赋值其属性,以及检查属性的"__isset()"和删除属性的方法"__unset()". 上一节中,我们为每个属性做了设置和获取的方法,在PHP
-
PHP中使用unset销毁变量并内存释放问题
复制代码 代码如下: for ( $i = 1; $i < 100; $i++ ) { $str = str_repeat('01234567', $i); $a = memory_get_usage(); unset($str); $b = memory_get_usage(); echo "\n ".$i.': '.($b - $a).' Bytes.'; } 从结果看出: 8 x 32 = 256 在256字节长的时候才真正有必要释放内存,有些人说,不如直接$str = n
-
php中is_null,empty,isset,unset 的区别详细介绍
is_null, empty, isset, unset 我们先来看看这4个函数的描述. isset 判断变量是否已存在(配置)unset 把变量删除(释放)掉empty 判断变量是否为空is_null 判断变量是否为NULLok,已经开始搞人了.那么开始,这4个函数中除了unset,其他3个都是判断函数,unset首先出局,因为他不会搞错,其次是is_null,我们可以把它看成是!isset,是isset的一个逆操作,下面一张表可以很清楚的说明他们之间的关系: 复制代码 代码如下: 变量
-
PHP魔术方法__ISSET、__UNSET使用实例
__isset() – 在对类中属性或者非类中属性使用isset()方法的时候如果没有或者非公有属性,则自动执行__isset()的方法 __unset() - 在对类中属性或者非类中属性使用unset()方法的时候如果没有或者非公有属性,则自动执行__unset()的方法 复制代码 代码如下: <?php /** * 针对类中的魔术方法 __isset() 和 __unset() 的例子 */ class Example { public $public
-
PHP中isset()和unset()函数的用法小结
isset(PHP 3, PHP 4, PHP 5 ) isset -- 检测变量是否设置 描述bool isset ( mixed var [, mixed var [, ...]])如果 var 存在则返回 TRUE,否则返回 FALSE. 如果已经使用 unset() 释放了一个变量之后,它将不再是 isset().若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE.同时要注意的是一个 NULL 字节("\0")并不等同于 PHP 的 NULL 常数.
-
PHP unset函数原理及使用方法解析
unset-释放给定的变量 说明 unset(mixed$var[,mixed$...] ) :void unset()销毁指定的变量. unset()在函数中的行为会依赖于想要销毁的变量的类型而有所不同. 如果在函数中unset()一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用unset()之前一样的值. <?php function destroy_foo() { global $foo; unset($foo); } $foo = 'bar'; destroy_foo(
-
Mysql临时表原理及创建方法解析
这篇文章主要介绍了Mysql临时表原理及创建方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 mysql 利用 temporary 关键字就可以创建出一个临时表.创建的这张表会在与服务器的会话终止时自动消失 语法:create temporary table tbl_name...; 规则:每个会话只能看到自己创建的临时表,不同的会话可以创建相同表名称的临时表.临时表的表名可以和永久表的名字相同. 好处:可以利用临时表保存一些临时数据,断
-
Python特殊属性property原理及使用方法解析
1 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 import math class Circle: def __init__(self,radius): #圆的半径radius self.radius=radius @property def area(self): return math.pi * self.radius**2 #计算面积 @property def perimeter(self): return 2*math.pi*
-
Javascript Symbol原理及使用方法解析
Symbol是ES6中新引入的一种基本数据类型,在此之前JavaScript中已有几种基本数据类型: Numberg String Boolean Null Undefined Object 不同于其他基本类型的通俗易懂,Symbol 是什么和有什么用一直有些让人困惑. 什么是Symbol JavaScript标准中规定对象的key只能是 String 或 Symbol 类型,区别在于 String 类型的key可以重复而 Symbol 类型的key是唯一的.Symbol 的本质是表示一个唯一标
-
Vue Render函数原理及代码实例解析
简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM 因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译的过程. 当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要的工具.官网上给他起了个名字叫createElement.还有约定的简写叫h 虽然在render里使用createElement函数创建DOM节点不是很直观
-
Java常用线程池原理及使用方法解析
一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等待工作调度,执行完任务后,线程并不会立即被销毁,而是重新处于空闲状态,等待下一次调度. 线程池的工作机制? 在线程池的编程模式中,任务提交并不是直接提交给线程,而是提交给池.线程池在拿到任务之后,就会寻找有没有空闲的线程,有则分配给空闲线程执行,暂时没有则会进入等待队列,继续等待空闲线程.如果超出最
-
GTK treeview原理及使用方法解析
GtkTreeView 构件是一个高级的构件,利用他你就可以制作出漂亮的普通列表或者是树状的列表.这个构件里可以包含一或者多行.他的构架呢?正是采用了大名鼎鼎的MVC (Model View Controller) 设计框架.也就是说数据和显示方式是进行了一种分离的操作. 于是在GtktreeView构件中确实还有着其他几个独立的对象结构(objects). 其中 GtkCellRenderer 就决定了在GtkTreeViewColumn. 中的数据究竟是如何来进行显示呈现的. GtkList
-
Python join()函数原理及使用方法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.join(): 将多个路径组合后返回 一.函数说明 1.join()函数 语法: 'sep'.join(seq) 参数说明 sep:分隔符.可以为空 seq:要连接的元素序列.字符串.元组.字典 上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新
-
NodeJS模块Buffer原理及使用方法解析
Buffer 作为 nodejs 中重要的概念和功能,为开发者提供了操作二进制的能力.本文记录了几个问题,来加深对 Buffer 的理解和使用: 认识缓冲器 如何申请堆外内存 如何计算字节长度 如何计算字节长度 如何转换字符编码 理解共享内存与拷贝内存 认识 Buffer(缓冲器) Buffer 是 nodejs 核心 API,它提供我们处理二进制数据流的功能.Buffer 的使用和 ES2017 的 Uint8Array 非常相似,但由于 node 的特性,专门提供了更深入的 api. Uin
-
Python -m参数原理及使用方法解析
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: python xxx.py python -m xxx.py 这是两种加载py文件的方式: 1叫做直接运行 2把模块当作脚本来启动(注意:但是__name__的值为'main' ) 不同的加载py文件的方式,主要是影响--sys.path 这个属性.sys.path 就相当于liunx中的PATH
随机推荐
- Javascript变量函数浅析
- DW8与VS2003的乱码问题解决
- VBS教程:VBScript 语句-Randomize 语句
- Java正则表达式匹配电话格式
- asp.net 去除viewstate第1/2页
- 使用OPENLAYERS3实现点选的方法
- 实现动画效果核心方式的js代码
- PHP魔术方法的使用示例
- python用reduce和map把字符串转为数字的方法
- PHP base64编码后解码乱码的解决办法
- 为什么Java中继承多数是有害的
- JQuery选中checkbox方法代码实例(全选、反选、全不选)
- Android程序美化之自定义ListView背景的方法
- Maven在Windows中的配置以及IDE中的项目创建(图文教程)
- java获取客服端信息的方法(系统,浏览器等)
- Java线程的start方法回调run方法的操作技巧
- 实战node静态文件服务器的示例代码
- spring boot springjpa 支持多个数据源的实例代码
- 详解Android获取所有依赖库的几种方式
- javascript异步编程的六种方式总结