繁体   English   中英

PHP Pass By Reference问题

[英]PHP Pass by Reference Issue

所以我遇到一个奇怪的问题,即函数没有通过引用参数传递来定义,但是对象正在以我无法解释的方式进行更改。 我已经验证了函数定义没有通过引用一次又一次地传递。 我从DB中检索了一个对象。 然后我在该初始对象上运行了分析函数。 我已将对象复制到另一个变量。 然后我在副本上运行不同的分析功能而不是原始分析功能。 运行第二个分析函数似乎改变了第一个变量对象。 关于可能会发生什么的任何想法。 我一直试图调试这几个小时,我无法解释这种行为。 我不希望发布实际功能,因为它们是专有信息,但是,我可以私下发送它们以获得一些帮助。 我很感谢你的时间来帮助我。

//get object from db
$resp= json_decode($ln->getResponseFromDb($resultid)); 

//run pwf analysis function
$resp = $ln->pwfBGCheck($resp);

//show result after pwf
print_r($resp->pwf);

/* shows
* stdClass Object ( [status] => p [reason] => Person has no c record. ) 
*/ 

//copy to another variable
$r2 = $resp;
//run pwf for s record other variable so it is not touching the first one!
$r2 = $ln->pwfBGCheckSexOffender2($r2);
echo '<BR>this is first variable<BR>';
print_r($resp->pwf);
/* copies from second to first for some reason... no pass by reference on this call...       resp variable has not been touched!
* stdClass Object ( [status] => p [reason] => Person has no s record. ) 
*/ 
echo '<BR>this is second<BR>';
print_r($r2->pwf);
/* returns
* stdClass Object ( [status] => p [reason] => Person has no s record. )
*/

由于PHP5对象总是通过引用传递。 如果要获取对象的副本,则必须使用clone

对象和参考

PHP中的值行为通常赋值的例外情况发生在对象上,这些对象在PHP 5中通过引用分配。对象可以通过clone关键字显式复制。

分配运营商

你也可以使用json_decode($json, true); (而不是json_decode($json); )来获取assoc array (而不是stdClass )。

并且引用没有任何问题。

永远疯了之后...我找到了这个解决方案:

$r2 = unserialize(serialize($resp));

我知道它并不理想,因为性能受到了打击,但我处于最后期限之前,需要尽快创建一个可行的解决方案。 我认为这个问题仍然存在,因为即使是被复制的变量也通过引用传递。 如果有人提出更好的选择,我愿意接受另一种有效的解决方案。 谢谢!

还...由于序列化的其他一些问题(libxml无法序列化),这个解决方案没有用......但后来我想到了

$r2 = json_decode(json_encode($resp));

这实际上就是诀窍!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM