php 在方法内unset全局变量,调用全局变量将保持调用 unset() 之前一样的值?

我查看unset的用法,有这个如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。当时,下面第二个函数为什么会影响全局变量呢?
function get_arr(&$arr){
unset($arr);
}
$arr1 = array(1, 2);
get_arr($arr1);
echo count($arr1);
结果为2
function get_arr(&$arr){
unset($arr[0]);
}
$arr1 = array(1, 2);
get_arr($arr1);
echo count($arr1);
结果为1 //不是还是2吗?为什么是1?

function get_arr(&$arr) //将这里的&去掉,将调用时传引用改为传值,则结果为2
{
unset($arr[0]);
}
$arr1 = array(1, 2);
get_arr($arr1);
echo count($arr1);

个人的理解是
unset($arr);将内存的数组与arr的关联切断,但内存中数组依然存在
unset($arr[0]);在传引用时却是直接在内存中将数组的下标为0的数据清除了追问

两个函数的参数我都想传引用,那么unset($arr)和unset($arr[0])这时有啥不同,一个不会影响外部全局变量,一个不会影响外部全局变量

追答

这里给出了unset方法在不同情况下使用后的结果http://www.php.net/manual/zh/function.unset.php

 

unset($arr)不影响可能是因为,内存的数组并没有发生变化,在方法内只是切断arr与内存的关联,便get_arr返回还原现场时将arr1与内存进行了关联,这时就arr1表示的数组并没有发生变化。

unset($arr[0])

个人理解,仅供参考。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-08
unset($arr);

unset($arr[0]);

还是不同的追问

有什么不同?

追答

一个是清除整个数组,一个是清楚指定索引数组

追问

“一个是清除整个数组,一个是清楚指定索引数组” 这么说的话,那么为什么一个全局变量的长度不变,一个变了呢?

第2个回答  2013-10-08
函数都是要返回值的,没有返回值的函数是错误的喔

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网