我在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_dumparray(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
我在这里做错了什么?请帮忙。
答案 0 :(得分:1)
嗯,你正在使用不同的ID变量:
echo "<br>Content id: ".$Id['content_id'];
array_push($contentArray, new Content(($id['content_id'])));
始终使用$Id
或$id
- 在这种情况下,您需要使用$Id
。
你应该避免像这样遮蔽变量的做法。调用数组迭代器变量$contentId
和参数$pageId
,或类似的东西。