两个php对象引用相同的实例

时间:2013-03-18 11:44:45

标签: php oop

我在for循环中创建了同一个类的实例。但似乎这些实例以某种方式引用同一个对象。

这是代码;

class Content{
    /**
     * current content id
     * @var int 
     */
    public $id;

    function __construct($id){
        echo " <br>Construct content ".$id;
    }

    function createContentOfPage($id){
        $contentIdArray = $this->dbo->getContentIdsForPage($id);
        /*var_dump of $contentIdArray aray is given below*/
        if(is_array($contentIdArray) && count($contentIdArray)>0){
        $contentArray = array();    
            foreach ($contentIdArray as $Id){
                echo "<br>Content id: ".$Id['content_id'];
                array_push($contentArray, new Content(($id['content_id'])));
            }

        }
    }
}

这是$ contentIdArray

的var_dump
array(2) {
  [0]=>
  array(1) {
    ["content_id"]=>
    string(1) "1"
  }
  [1]=>
  array(1) {
    ["content_id"]=>
    string(1) "2"
  }
}

如果我在这里运行createContentOfPage(),那就是输出;

Content id: 1 
Construct content 1
Content id: 2 
Construct content 1

我在这里做错了什么?请帮忙。

1 个答案:

答案 0 :(得分:1)

嗯,你正在使用不同的ID变量:

echo "<br>Content id: ".$Id['content_id'];
array_push($contentArray, new Content(($id['content_id'])));

始终使用$Id$id - 在这种情况下,您需要使用$Id


你应该避免像这样遮蔽变量的做法。调用数组迭代器变量$contentId和参数$pageId,或类似的东西。