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 に答える