我在下面有一个函数getComment。这个功能的问题在于
$test->TestComments[$type]
将包含相同的值,namley最后一条评论及其用户名和时间戳。
public function getComment($test) {
$Id = $test->Id;
$localComment = new stdClass();
$queryComment = $this->getResultCommentQuery($Id);
$result = odbc_exec($this, $queryComment);
$no_results = odbc_num_rows($result);
for ($i = 1; $i <= $no_results; $i++) {
odbc_fetch_row($result, $i);
$type = trim(odbc_result($result, "result"));
$localComment->Comment = trim(odbc_result($result, "comment"));
$localComment->Username = trim(odbc_result($result, "username"));
$localComment->Timestamp = trim(odbc_result($result, "timestamp"));
$test->TestComments[$type] = $localComment;//there are no unique
//values here, every comment will have the same "timestamp", "comment", and "username", namley the last one.
echo($localComment->Comment);//If I do this I see that there are different values.
}
return $test; //But this will only contain a correct nr of array attributes with same content (last comment info), see bellow.
}
例如我得到的东西。
TestComments":{"Pay":{"Comment":"Test","Username":"en","Timestamp":"2014-08-01 14:27:41.410"},
"Peak":{"Comment":"Test","Username":"en","Timestamp":"2014-08-01 14:27:41.410"}}
这就是我得到两次相同的内容而不是两行具有不同的值。有人看到可能出错的地方吗?
提前致谢。
答案 0 :(得分:1)
你的问题是使用
$test->TestComments[$type] = $localComment;
这不符合你的想法。它实际上是将引用复制到对象$test->TestComments[$type]
而不是对象本身的内容。
因为您只有一个实际的$localComment
对象,所有这些引用都指向一个对象,该对象将包含最后放入对象的内容。
你真正想做的是CLONE这个对象,它创建了一个对象的副本,而不只是为原始对象分配一个引用。
所以改变这一行
$test->TestComments[$type] = $localComment;
到
$test->TestComments[$type] = clone $localComment;
并且您现有的代码应该按预期工作。