PHP编辑变量值编辑其他变量值

时间:2015-12-06 10:58:00

标签: php laravel variables laravel-5

我对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

你能给我一些解决方案吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

您可能需要查看:

http://php.net/manual/en/language.oop5.references.php

具体做法是:

  

对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。

如果要创建对象的克隆,则需要执行以下操作:

$this->itemsQuery = clone $query;

请参阅:http://php.net/manual/en/language.oop5.cloning.php