我对PHP中的这种行为感到很困惑,我不确定如何解决它。
我想做这个:
我生成Object
并使用一些方法来设置其属性。然后我想"缓存"对象,所以我将它存储到其他变量,然后我用对象做其他事情,但它也影响缓存对象。
你能给我一些建议,怎么做?
以下是代码段:
$query = new Obj();
$this->item->generateItemsQuery($query);
$this->itemsQuery = $query; // here I "cache" the variable for next usage...
// here I edit the old variable $query
if ($this->getFilter('limit') !== null) {
$query = $query->limit($this->getFilter('limit'));
}
if ($this->getFilter('page') !== null) {
$offset = ($this->getFilter('page') - 1) * $this->getFilter('limit');
$query = $query->offset($offset);
}
public function generateItemsQuery(&$query)
{
// some other things like this: $query = $query->offset($offset);
}
在此示例中 - >问题是,当我申请方法"限制"和"偏移"在 $ query 上,它也会影响 $ this-> itemsQuery
你能给我一些解决方案吗?
非常感谢
答案 0 :(得分:2)
您可能需要查看:
http://php.net/manual/en/language.oop5.references.php
具体做法是:
对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。
如果要创建对象的克隆,则需要执行以下操作:
$this->itemsQuery = clone $query;