2013-03-18 115 views
0

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

这是代码;

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

您一定会同时使用'$ Id','$ id'和成员变量'$ id'来混淆某人。 – 2013-03-18 11:48:30

回答

1

嘛,你使用不同的ID变量:

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

二者必选其一$Id$id一致 - 在这种情况下,你需要使用$Id


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

+0

好!现在我感觉自己像是在阻碍自己... :(( 谢谢你) – 2013-03-18 11:51:32

相关问题