Gau*_*rav 4 php serialization clone
随着这个问题的参考,我得到了另一个解决方案是使用
$obj2 = unserialize(serialize($obj1));
Run Code Online (Sandbox Code Playgroud)
代替
$obj2 = clone $obj1;
Run Code Online (Sandbox Code Playgroud)
哪一个更好用?
Jef*_*tin 10
TL;博士版本:使用clone简单对象和树木,unserialize(serialize())为对象的复杂图形.
更长的解释:除非$obj1实现__clone(),表达式clone $obj1将返回一个浅表副本$obj1,但共享指向的对象的内容$obj1.即使__clone()通过递归clone成员来执行深度复制,它也只能在对象图是树的情况下安全地工作.如果对象图包含循环,它将无限递归并且......好吧......这是Stack Overflow的原因.:-)如果它是有向非循环图而不是树,任何多次引用的对象都会将这些多个引用替换为副本,这可能不是您想要的.
unserialize(serialize($obj1))另一方面,它将处理对象图中的循环,但在CPU时间和内存方面都更昂贵.
| 归档时间: |
|
| 查看次数: |
1672 次 |
| 最近记录: |