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

来源:互联网 发布:七天网络查询成绩登陆 编辑:程序博客网 时间:2024/06/06 19:08

在 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中每个对象会对应一个对象的编号,然后在指向数据的地址,所以,大家可以测试着看看,也就明白了

0 0
原创粉丝点击