0

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

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

4

1 回答 1

1

好吧,您正在使用不同的 ID 变量:

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

使用其中之一$Id$id始终使用 - 在这种情况下,您需要使用$Id.


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

于 2013-03-18T11:49:43.030 回答