博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 变量引用,函数引用
阅读量:6278 次
发布时间:2019-06-22

本文共 2162 字,大约阅读时间需要 7 分钟。

在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。

 

引用传递

function foo ( &$var )

{$var++;}

foo ($a);  // 注意在函数调用时没有引用符号 - 只有函数定义中有。光是函数定义就足够使参数通过引用来正确传递了

引用返回

function &init_users()

{ ... return $cls;}

使用引用返回,必须在两个地方都用&符号

$user = & init_users();

function &init_users()

{ ...return $cls;}

取消引用

当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

$a="hihaha";

$b= &$a;
unset($b);
echo$a;// shows "hihaha"

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这里有个php引用的例子,好好看一遍:

 <?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"
?>
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PHP unset全局变量在用户函数中只能销毁局部变量,并不能销毁全局变量。(从PHP4开始unset已经不再是一个函数了,而是一个语句)。如果需要销毁全局变量的应该如何做呢?也很简单,用$GLOBALS数组来实现。

1. < ?PHP 

2. function foo() { 
3. unset($GLOBALS['bar']);  // 而不是unset($bar)
4. } 
5. $bar = “something”; 
6. foo(); 
7. var_dump($bar); 
8. ?>

对于unset:

1. 该函数只有在变量值所占空间超过256字节长的时候才会释放内存

2. 只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放(也要执行1的判断)
也就是检查有无其他变量绑定,有的话就不会释放了。就像这个例子:

$a="hihaha";

$b= &$a;
unset($b);
echo$a;// shows "hihaha"

所以建议大家用 $变量=null 的方法来释放其内存。

 给一个测试当前php脚本内存使用情况的函数:

<?php

echo memory_get_usage()."\n";
$a = str_repeat("A", 1000);

echo memory_get_usage()."\n";

$b=&$a;  //下面的内存大小不会变,unset只是解除$a的绑定

unset($a);

echo memory_get_usage()."\n";

?>

自己理解的仍然不行,看这里:

 

原文地址 : http://hi.baidu.com/k45hifz/item/3d375e147d5dbd36b831805e

转载于:https://www.cnblogs.com/shistou/archive/2013/03/14/2960473.html

你可能感兴趣的文章
建设网站应该考虑哪些因素
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>
控件的拖动
查看>>
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>