【发布时间】:2012-12-22 20:41:44
【问题描述】:
一整天都在把我的头从桌子上敲下来。
// Iterate over project array to populate release data
for ($i = 0; $i < count($data); $i++) {
$data[$i]->setProjectReleaseSchedule( $proj_scheds[$i] );
//Get each projects Est and Act hours
$options = new stdClass;
$options->default = true;
$options->project_id = $data[$i]->getProjectId();
$options->department_id = $person_dm->getPersonDepartmentId();
//works; AKA: property get assigned an int thatr incriments evern loop
//$data[$i]->data->proj_hours = $this->counter++;
//$weekly_report_dm->getProjectHours returns an object w/ populated properties
$data[$i]->data->proj_hours = $weekly_report_dm->getProjectHours($options);
//As a test, this dumps what is expected...
echo'<pre>';
print_r( $data[$i]->data->proj_hours );
echo'</pre>';
}
echo'<pre>';
//After the loop completes and I try to dump the data the property $data->data->proj_hours is assigned an object..
//but the object properties are all null :(.
print_r( $data );
echo'</pre>';
exit;
所以你可以看到我在一个对象数组上循环;对于每个对象,我都有另一种数据方法,它返回预期的数据。 “print_r($data[$i]->data->proj_hours);”。但是,一旦循环完成并且我尝试转储该对象分配给父对象的数据,但所述对象的属性为空/空白。
所以问题是:为什么我可以将 INT、STRINGS 等分配给对象属性,并且它们会在 foreach 循环之外持续存在。但是在 foreach 循环中将对象属性分配给父对象时,这些值不会持续存在?
【问题讨论】:
-
你看过
$weekly_report_dm->getProjectHours($options);返回什么吗? -
我有,它按预期返回数据。
-
疯狂猜测 -
$weekly_report_dm->getProjectHours($options)不是返回对更改每次调用的相同私有属性的引用吗?有的话可以试试$data[$i]->data->proj_hours = clone $weekly_report_dm->getProjectHours($options); -
你确定 for 循环中新 StdClass 的实例化不取决于结果吗?为什么要在循环内实例化它?之前不能实例化吗?
-
jasir:用'clone'关键字尝试过......你是神。请将其发布为答案,以便我 +1 你。 art2:是的,我可能应该在循环之外这样做。 +1 为指针。谢谢你们的帮助,正是我所寻求的。
标签: php loops properties spl