将对象分配为值和引用在PHP中无法正常工作
发布时间:2020-12-13 16:51:33 所属栏目:PHP教程 来源:网络整理
导读:我来自 Java Background.我在Java中使用了对象作为值调用和引用. 但是当我在 PHP中使用这些东西时,我没有达到我预期的结果. ?phpclass A { public $t; function __construct() { $this-t = 100; }}/*By value */echo 'By Valuebr/';$obj1 = new A();echo $ob
我来自
Java Background.我在Java中使用了对象作为值调用和引用.
但是当我在 PHP中使用这些东西时,我没有达到我预期的结果. <?php class A { public $t; function __construct() { $this->t = 100; } } /*By value */ echo 'By Value<br/>'; $obj1 = new A(); echo $obj1->t; $obj2 = $obj1; $obj2->t = 200; echo $obj2->t; echo $obj1->t; //expects Result 100 but it prints 200 /*By Reference */ echo '<br/>By Reference<br/>'; $obj3 = new A(); echo $obj3->t; $obj4 = &$obj3; echo $obj4->t; $obj4->t = 500; echo $obj4->t; echo $obj3->t; ?> 当我通过值将一个对象分配给另一个Object时,如果我修改了复制对象中的属性值,则这也会影响原始对象. Plz清除我的疑问任何人…… 谢谢… 解决方法
嗯…… PHP支持By Value和By Reference.但是,有一些怪癖……
默认情况下,PHP5始终通过引用分配/传递对象: $obj1 = new stdClass(); $obj2 = $obj1; print spl_object_hash($obj1); print "<br>"; print spl_object_hash($obj2); 输出: 000000001ef37c150000000046e30ead 000000001ef37c150000000046e30ead 基本上,$obj1和$obj2都指向同一个对象. 但是,对于原始类型(例如整数,字符串等),情况并非如此. $var1 = "some string"; $var2 = $var1; $var1 = "foo"; print $var1; print '<br>'; print $var2; 输出: foo some string 使用&你也可以通过引用原语传递. $var1 = "some string"; $var2 = &$var1; $var1 = "foo"; print $var1; print '<br>'; print $var2; 输出: foo foo 而且你也可以通过值传递对象 $obj1 = new stdClass(); $obj2 = clone $obj1; print spl_object_hash($obj1); print "<br>"; print spl_object_hash($obj2); 输出: 0000000062516daa000000001745e928 0000000062516da9000000001745e928 简而言之,默认情况下,原始类型按值传递,而对象通过引用传递. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |