unset() 与引用关系 总结
2015-09-17 08:26
393 查看
引用有两个好处,一个是内存省,一个是速度快。unset只有个好处,就是省内存。
unset(&$hh) 只是断开了变量名和变量值之间的绑定。这并不意味着变量内容被销毁了。
对于unset:
1. 该函数只有在变量值所占空间超过256字节长的时候才会释放内存
2. 只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放(也要执行1的判断)
也就是检查有无其他变量绑定,有的话就不会释放了。就像这个例子:
unset全局变量在用户函数中只能销毁局部变量,并不能销毁全局变量。(从PHP4开始unset已经不再是一个函数了,而是一个语句)。如果需要销毁全局变量的应该如何做呢?也很简单,用$GLOBALS数组来实现。
以下是unset() 和引用关系 的例子:
引用参数传递
引用传递返回函数值
unset(&$hh) 只是断开了变量名和变量值之间的绑定。这并不意味着变量内容被销毁了。
$a="dgs"; $b= &$a; unset($b); echo$a;// shows "<span style="font-family: Arial, Helvetica, sans-serif;">dgs</span><span style="font-family: Arial, Helvetica, sans-serif;">"</span>
对于unset:
1. 该函数只有在变量值所占空间超过256字节长的时候才会释放内存
2. 只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放(也要执行1的判断)
也就是检查有无其他变量绑定,有的话就不会释放了。就像这个例子:
$a="hihaha"; $b= &$a; unset($b); echo$a;// shows "hihaha"所以建议用 $变量=null 的方法来释放其内存。
unset全局变量在用户函数中只能销毁局部变量,并不能销毁全局变量。(从PHP4开始unset已经不再是一个函数了,而是一个语句)。如果需要销毁全局变量的应该如何做呢?也很简单,用$GLOBALS数组来实现。
以下是unset() 和引用关系 的例子:
<?php
//if you do:
$a="hihaha";
$b= &$a;
$c="eita";
$b=$c;
echo$a;// shows "eita"
$a="hihaha";
$b= &$a;
$c="eita";
$b= &$c;
echo$a;// shows "hihaha"
$a="hihaha";
$b= &$a;
$b=null;
echo$a;// shows nothing (both are set to null)
$a="hihaha"; $b= &$a; unset($b); echo$a;// shows "hihaha"
$a="hihaha";
$b= &$a;
$c="eita";
$a=$c;
echo$b;// shows "eita"
$a="hihaha";
$b= &$a;
$c="eita";
$a= &$c;
echo$b;// shows "hihaha"
$a="hihaha";
$b= &$a;
$a=null;
echo$b;// shows nothing (both are set to null)
$a="hihaha";
$b= &$a;
unset($a);
echo$b;// shows "hihaha"
?>
引用参数传递
function foo ( &$var ) {$var++;} foo ($a); // 注意在函数调用时没有引用符号 - 只有函数定义中有。光是函数定义就足够使参数通过引用来正确传递了
引用传递返回函数值
function &init_users() { ... return $cls;} //使用引用返回,必须在两个地方都用&符号 $user = & init_users(); function &init_users() { ...return $cls;}
相关文章推荐
- eclipse不能进入debug模式的解决方法
- CocoaPods的一些略为高级一丁点的使用
- jz2440 ping问题
- CodeForces 545D Queue (排序模拟)
- mvc api
- 批量修改mysql数据库表前缀。
- Unity Shader概念描述
- Leetcode #213 House Robber II
- HDU 5437 模拟
- “土豪”们的新人生模型
- 小计算机实现
- 【1】基于ATmega 8A -PU 的蓝牙遥控电源插座设计——【2、阻容降压原理及电路】
- 苏宁的逆市“O2O进化论”
- 关于指针及 * 运算符的一些使用方法
- android apk --- Active的生命周期
- 用NetBeNetBeans
- Unity粒子系统参数解析(二)(发射器)
- 编译安装zabbix 3.0及分开部署配置详解
- CodeForces 545B Equidistant String (模拟)
- 黑客专用屏保