PHP 值传递 引用传递

  • JS中数组是引用传递
  • PHP资源和对象等数据类型是引用传递,其数据类型是值传递(包括数组)
  • 栈内存(快速内存)中存放标量数据类型,复合数据类型的变量名和数据地址

对象引用传递

$obj = new stdClass;
$obj->id = 1;
$new = $obj;
$new->id = 2;
var_dump($obj->id); // 2
var_dump($new->id); // 2

对象参数引用传递

function test($obj){
    $obj->id = 2;
}
$obj = new stdClass;
$obj->id = 1;
test($obj);
var_dump($obj->id); // 2

值传递

$a = 1;
$b = $a;
$b = 2;
var_dump($a); // 1
var_dump($b); // 2
  • 循环时引用带来的问题
    循环时候由于前后两个循环的变量名字一样,第一个循环时候,实际上是数组中每个元素的值被作为引用传递过去,第二个循环时候,$value这个变量引用的是数组最后一个值,这样最后那个值实际上一直在跟着循环变化

    $arr = [
      1,2,3
    ];
    for($arr as &$value){
    
    }
    for($arr as $value){
      // var_dump($arr);
    }
    var_dump($arr); // 1 2 2

    解决方法
    把第二个循环也改成引用

相关文章

此处评论已关闭