php是值传递还是,php引用传递和值传递的区别

a2ecfefd563b19daed1b108e068bf560.png

按值传递

函数范围内对值的任何改变在函数外部都会被忽略,值传递是把值拷贝一份,两个变量指向两个内存地址。$a = 6;

$b = $a; // 这是值传递,把 $a 的值拷贝给了 $b,在内存中 $a 和 $b 不在一个地址中,更改任意变量的值对对方无影响

$b = 7;

echo $a; //输出:6

function foo($b){

echo ++$b;

}

foo($b); // 输出:8

echo $b; // 输出:7 说明函数内的改变对函数外的值没有影响,因为,当 $b 传入函数内的时候是值传递,

会把值在内存中拷贝一份存入一个新的内存地址中

按引用传递

函数范围内对值的任何改变在函数外部也能反映出这些修改,引用传递是将一个变量的内存地址标识传给了内外一个变量,两个变量最终指向内存同一个地址。$a = 6;

$b = &$a;

$b = 7;

echo $a; //输出:7

function foo(&$c){

echo ++$c;

}

foo($b); // 输出:8

echo $b; // 输出:8 说明函数内的改变对函数外的值有影响,因为,当 $b 传入函数内的时候是引用传递,

函数体内的$b和外部的$b实际上是指向同一个内存地址,所以一个改变,另外一个变量的值也会改变function func(&$arr){

$arr['a'] = [];

$arr = &$arr['a'];

$arr['b'] = '333';

var_dump($arr);

}

$arr = [

'a' => '111',

'b' => '222'

];

func($arr);

var_dump($arr);

/**

# 第一个输出:

array(1) {

["b"]=> string(3) "333"

}

# 第二个输出:

array(2) {

["a"]=> array(1) {

["b"]=> string(3) "333"

}

["b"]=> string(3) "222"

}

*/

上面的示例明明还是引用传递进去的为啥会两个 $arr 打印出不一样的结果呢?

因为里面有一步操作 $arr = &$arr['a']; 这一步之后函数内的 $arr 的指向地址已经改变,指向了$arr['a'],所以两次打印的结果不一样。

注意:php 中对于对象默认引用传值一般引用传值用在需要在函数体内改变传入参数并且需要影响外部变量的时候使用,其他时候一般使用值传递。

推荐教程:PHP视频教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值