导航:首页 > 编程语言 > phpunset函数

phpunset函数

发布时间:2025-02-18 00:04:02

1. Thinkphp如何清空静态数组

ThinkPHP清空静态数组还是使用原生PHP来做,有几种方法。

  1. 使用unset函数。如:unset($array); // 将变量array注销

  2. 直接重新赋值。如:$arr = array(); // 将变量arr赋值为空数组

$arr = ''; // 将变量arr赋值为空字符串

2. PHP8中的魔术方法-PHP8知识详解

在PHP8中,魔术方法为开发者提供了更灵活的类行为定义方式,它们以两个下划线(__)开头。通过魔术方法,可以实现如对象创建、方法调用、属性访问与修改等行为。以下为一些常见魔术方法的简介:



__construct(): 类的构造函数。当对象创建时自动调用。



__destruct(): 类的析构函数。当对象销毁时自动调用。



__get($name): 在尝试读取不可访问属性值时自动调用。



__set($name, $value): 在给不可访问属性赋值时自动调用。



__isset($name): 在调用isset()或empty()函数检查不可访问属性时自动调用。



__unset($name): 在调用unset()函数删除不可访问属性时自动调用。



__call($name, $arguments): 在调用不存在或不可访问方法时自动调用。



__call static($name, $arguments): 在调用不存在或不可访问静态方法时自动调用。



__toString(): 在将对象作为字符串输出时自动调用。



__invoke($arguments): 当尝试将对象作为函数调用时自动调用。



__clone(): 当对象被克隆时自动调用。



__debugInfo(): 在使用var_mp()函数输出对象信息时自动调用。



__serialize(): 在对象被序列化时自动调用。



__unserialize($data): 在对象被反序列化时自动调用。



__sleep(): 在对象被序列化时自动调用,返回要序列化的属性列表。



__wakeup(): 在对象被反序列化时自动调用。



本文主要介绍两个魔术方法:__set()和__get()。面向对象设计原则强调封装性,不鼓励直接访问类属性。通过使用__set()和__get(),可以间接访问类属性,避免直接访问,提升代码的可维护性和安全性。



当尝试写入未定义或不可见的成员变量时,会触发__set()方法。该方法接收变量名称和值作为参数。



在调用未定义或不可见的成员变量时,会触发__get()方法。该方法接收要调用的变量名称作为参数。



以下为使用__set()和__get()的参考代码示例:



运行结果表明,尝试访问未定义成员变量时,会自动调用__set()和__get()方法,实现间接访问类属性的功能。

3. php unset是什么意思 博客园

unset是php的一个语句,它的功能是:销毁指定的变量。注意在 PHP 3 中,unset() 将返回
TRUE(实际上是整型值 1),而在 PHP 4 中,unset() 不再是一个真正的函数:它现在是一个语句。这样就没有了返回值,试图获取 unset() 的返回值将导致解析错误。
同时,删除一个变量以后,将会释放内存。

在比较大的程序里,查询数据库数千条数据存放到一个变量里面,如果变量用完不再使用后应使用unset将变量删除并释放内存,这样可以加快服务器的响应时间,减轻服务器负担,创造一个良好的服务器环境。

4. php的unset函数何时释放内存

PHP 无法手动释放内存,你 unset 了,也要等 GC 来自动回收, 这个不是 C语言, 内存是 PHP 来管理的。 这个只能是加大内存,或者改用其他内存占用小的算法

5. 解析PHP中的unset究竟会不会释放内存

PHP中的unset究竟会不会释放内存?以下我们实例说明一下

首先让我们看一个例子

复制代码 代码如下: var_mp(memory_get_usage()); $a = "laruence"; var_mp(memory_get_usage()); unset($a); var_mp(memory_get_usage());

输出(在我的个人电脑上 可能会因为系统 PHP版本 载入的扩展不同而不同): int( ) int( ) int(

注意到 = 于是就有了各种的结论 有的人说PHP的unset并不真正释放内存 有的说 PHP的unset只是在释放大变量(大量字符串 大数组)的时候才会真正free内存 更有人说 在PHP层面讨论内存是没有意义的

那么 到底unset会不会释放内存? 这 个字节跑哪里去了? 要回答这个问题 我将从俩个方面入手: 这 个字节去哪里了 首先 我们要打破一个思维: PHP不像C语言那样 只有你显示的调用内存分配相关API才会有内存的分配 也就是说 在PHP中 有很多我们看不到的内存分配过程 比如对于:

复制代码 代码如下: $a = "laruence";

隐式的内存分配点就有: 为变量名分配内存 存入符号表 为变量值分配内 所以 不能只看表象 第二 别怀疑 PHP的unset确实会释放内存(当然 还要结合引用和计数 这部分的内容请参看我之前的文章深入理解PHP原理之变量分离/引用) 但这个释放不是C编程意义上的释放 不是交回给OS 对于PHP来说 它自身提供了一套和C语言对内存分配相似的内存管理API 这些API和C的API意义对应 在PHP内部都是通过这些API来管理内存的

当我们调用emalloc申请内存的时候 PHP并不是简单的向OS要内存 而是会像OS要一个大块的内存 然后把其中的一块分配给申请者 这样当再有逻辑来申请内存的时候 就不再需要向OS申请内存了 避免了频繁的系统调用 比如如下的例子:

复制代码 代码如下: <?php var_mp(memory_get_usage(TRUE)); //注意获取的是real_size $a = "laruence"; var_mp(memory_get_usage(TRUE)); unset($a); var_mp(memory_get_usage(TRUE));

输出: int( ) int( ) int(

也就是我们在定义变量$a的时候 PHP并没有向系统申请新内存

同样的 在我们调用efree释放内存的时候 PHP也不会把内存还给OS 而会把这块内存 归入自己维护的空闲内存列表 而对于小块内存来说 更可能的是 把它放到内存缓存列表中去(后记 某些版本的PHP 比如我验证过的PHP 在调用get_memory_usage()的时候 不会减去内存缓存列表中的可用内存块大小 导致看起来 unset以后内存不变)

现在让我来回答这 个字节跑哪里去了 就向我刚才说的 很多内存分配的过程不是显式的 看了下面的代码你就明白了:

复制代码 代码如下: <?php var_mp("I am jb net"); var_mp(memory_get_usage()); $a = "laruence"; var_mp(memory_get_usage()); unset($a); var_mp(memory_get_usage());

输出: string( ) "I am jb net" int( ) //赋值前 int( ) int( ) //是的 内存正常释放

= 正常了 也就是说这 个字节是被输出函数给占用了(严格来说 是被输出的Header占用了) 只增不减的数组 Hashtable是PHP的核心结构(了解Hashtable 可以参看我之前的文章深入理解PHP之数组(遍历顺序)) 数组也是用她来表示的 而符号表也是一种关联数组 对于如下代码:

复制代码 代码如下: var_mp("I am jb net"); var_mp(memory_get_usage()); $array = array_fill( "laruence"); foreach ($array as $key => $value) { ${$value $key} = NULL; } var_mp(memory_get_usage()); foreach ($array as $key=> $value) { unset(${$value $key}); } var_mp(memory_get_usage());

我们定义了 个变量 然后又按个Unset了他们 来看看输出: string( ) "I am jb net" int( ) int( ) int(

Wow 怎么少了这么多内存? 这是因为对于Hashtable来说 定义它的时候 不可能一次性分配足够多的内存块 来保存未知个数的元素 所以PHP会在初始化的时候 只是分配一小部分内存块给HashTable 当不够用的时候再RESIZE扩容

而Hashtable 只能扩容 不会减少 对于上面的例子 当我们存入 个变量的时候 符号表不够用了 做了一次扩容 而当我们依次unset掉这 个变量以后 变量占用的内存是释放了( – ) 但是符号表并没有缩小 所以这些少的内存是被符号表本身占去了…

lishixin/Article/program/PHP/201311/21152

阅读全文

与phpunset函数相关的资料

热点内容
python组合数据类型 浏览:658
空气压缩机站 浏览:628
什么是企业app 浏览:766
cp1l编程电缆 浏览:131
ev3编程模块 浏览:271
程序员脖子痛如何缓解 浏览:531
java加密aes对称加密算法 浏览:599
格式工厂视频压缩方法 浏览:478
编译后的函数和原始函数如何对应 浏览:623
阐述邮件加密解密过程 浏览:402
敲沙子声控解压 浏览:57
计算机教室用什么服务器 浏览:803
华为畅享9怎么设置短信加密 浏览:287
中国现代编译器 浏览:853
如何得到app专栏 浏览:453
魔兽世界日本服务器什么职业多 浏览:729
表格加密怎么设置只读模式打开 浏览:884
哪个app可以不用花呗分期 浏览:861
SSL是对称加密吗 浏览:46
捷途app钥匙怎么用 浏览:960