在函数中 unset() 一个通过引用传递的变量

本文探讨了PHP中使用unset函数删除引用传递的变量时的行为差异。通过两个实例对比,解释了为何在某些情况下unset操作会影响到外部变量,而在另一些情况下则不会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php官方文档描述:如果在函数中 unset() 一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。

<?php
function foo(&$bar) {
    unset($bar);
    $bar = "blah";
}
 
$bar = 'something';
echo "$bar\n";
 
foo($bar);
echo "$bar\n";
?>

以上代码输出:

something
something

 

继续测试:

<?php
$cars=array("Volvo","BMW","Toyota");
	
function foo(&$cars) {
    unset($cars[0]);
	print_r($cars);
	echo "<br>";
}
 
print_r($cars);
echo "<br>";
 
foo($cars);
print_r($cars);
echo "<br>";
?>

以上代码输出:

output:
Array
(
    [0] => Volvo
    [1] => BMW
    [2] => Toyota
)

Array
(
    [1] => BMW
    [2] => Toyota
)

Array
(
    [1] => BMW
    [2] => Toyota
)

同样时函数内调用unset(),同样时引用传递,为啥这次就改变了全局变量?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值