php值和对象的值传递和引用传递

在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址…… 查看引用不是什么了解更多信息。 替代的是,引用是符号表别名。注意在PHP 中,变量名和变量内容是不一样的, 因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的硬链接。


因为最近发现了对象用引用传递的时候,会有些微秒的变化,上代码看看


$v1 = 1;
$v2 = $v1;
echo '<b>变量初始状态(值传递)</b>';
echo '$v1的值:'.$v1.',$v2的值是:'.$v2;
echo "<br />";

$v2 = 2;
echo '<b>$v2赋值为2后的状态</b>';
echo '$v1的值:'.$v1.',$v2的值是:'.$v2;
echo "<br />";

$v1 = 3;
echo '<b>$v1赋值为3后的状态</b>';
echo '$v1的值:'.$v1.',$v2的值是:'.$v2;
echo "<br />";

unset($v1);
echo '<b>$v1销毁后的状态</b>';
echo '$v2的值是:'.$v2;
echo "<br />";

echo "<hr />";

$v3 = 1;
$v4 = &$v3;
echo '<b>变量初始状态(引用传递)</b>';
echo '$v3的值:'.$v3.',$v4的值是:'.$v4;
echo "<br />";

$v3 = 2;
echo '<b>$v3赋值为2后的状态</b>';
echo '$v3的值:'.$v3.',$v4的值是:'.$v4;
echo "<br />";

unset($v3);
echo '<b>$v3销毁后的状态</b>';
echo '$v4的值是:'.$v4;
echo "<br />";

echo "<hr />";


class test {
    public $v1 = 1;
    public $v2 = 2;
}

$t1 = new test();

$t2 = $t1;

echo '<b>对象初始状态(值传递)</b>';
echo "<br />";
echo '对象$t1:  $t1->v1的值:'.$t1->v1.',$t1->v2的值是:'.$t1->v2;
echo "<br />";
echo '对象$t2:  $t2->v1的值:'.$t2->v1.',$t2->v2的值是:'.$t2->v2;
echo "<br />";

$t1->v1 = 2;
$t1->v2 = 3;
echo '<b>$t1对象改变属性值后</b>';
echo "<br />";
echo '对象$t1:  $t1->v1的值:'.$t1->v1.',$t1->v2的值是:'.$t1->v2;
echo "<br />";
echo '对象$t2:  $t2->v1的值:'.$t2->v1.',$t2->v2的值是:'.$t2->v2;
echo "<br />";

$t1 = 123;
echo '<b>$t1改变值类型后</b>';
echo "<br />";
echo '对象$t2:  $t2->v1的值:'.$t2->v1.',$t2->v2的值是:'.$t2->v2;
echo "<hr />";

$t3 = new test();
$t4 = &$t3;

echo '<b>对象初始状态(引用传递)</b>';
echo "<br />";
echo '对象$t3:  $t3->v1的值:'.$t3->v1.',$t3->v2的值是:'.$t3->v2;
echo "<br />";
echo '对象$t4:  $t4->v1的值:'.$t4->v1.',$t4->v2的值是:'.$t4->v2;
echo "<br />";

$t3->v1 = 2;
$t3->v2 = 3;
echo '<b>$t1对象改变属性值后</b>';
echo "<br />";
echo '对象$t3:  $t3->v1的值:'.$t3->v1.',$t3->v2的值是:'.$t3->v2;
echo "<br />";
echo '对象$t4:  $t4->v1的值:'.$t4->v1.',$t4->v2的值是:'.$t4->v2;
echo "<br />";


$t3 = 123;
echo '<b>$t1对象改变属性值后</b>';
echo "<br />";
echo '对象$t4:  $t4->v1的值:'.$t4->v1.',$t4->v2的值是:'.$t4->v2;
echo "<br />";

运行结果如下 :


会发现,对象的值传递的时候改变一个值,被赋值的变量对象也会被改变,因为php中每个对象会对应一个对象的编号,然后在指向数据的地址,所以,大家可以测试着看看,也就明白了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值