Linfinity

Never say never.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

php对象传递原理

Posted on 2018-12-28 23:20  Linfinity  阅读(267)  评论(0)    收藏  举报

案例一

<?php

class Person{
    
    public $name;
    
}

$p1 = new Person;
$p1->name = 'dick';
$p2 = $p1;
$p2->name = 'leo';


echo 'p1name->'.$p1->name;
echo '<br>';
echo 'p2name->'.$p2->name;   

输出结果为:

p1name->leo
p2name->leo

原因:

当我们把对象赋值给一个变量时也是值拷贝,但是拷贝的是对象的标识符,所以两个变量指向同一个地方,$p2改变时$p1也改变。

 

案例二

<?php

class Person{
    
    public $name;
    
}

$p1 = new Person;
$p1->name = 'dick';
$p2 = $p1;
$p2 = '字符串';


echo 'p1name->'.$p1->name;

输出结果为:

p1name->dick

原因:

$p1变量指向发生改变不影响$p1

 

 案例三

<?php

class Person{
    
    public $name;
    
}

$p1 = new Person;
$p1->name = 'dick';
$p2 = &$p1;
$p2->name = 'leo';

unset($p2);

echo 'p1name->'.$p1->name;
// echo '<br>';
// echo 'p2name->'.$p2->name;

输出结果为:

p1name->leo

原因:

虽然$p2通过引用传递与$p1指向同一个地方,但主要unset()销毁的是$p2变量而不是他所指向的地方,所以$p1仍可以正常使用。