我查看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[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]);
还是不同的追问
unset($arr[0]);
还是不同的追问
有什么不同?
追答一个是清除整个数组,一个是清楚指定索引数组
追问“一个是清除整个数组,一个是清楚指定索引数组” 这么说的话,那么为什么一个全局变量的长度不变,一个变了呢?
第2个回答 2013-10-08
函数都是要返回值的,没有返回值的函数是错误的喔