1

これで一日中机から頭をぶつけてきました。

    // 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;

ご覧のとおり、Imはオブジェクトの配列をループしています。オブジェクトごとに、データ用の別のメソッドを取得しました。これは、期待されるデータを返します。「print_r($ data [$ i]-> data-> proj_hours);」。ただし、ループが終了してデータをダンプしようとすると、オブジェクトは親に割り当てられますが、そのオブジェクトのプロパティはnull/空白になります。

したがって、質問:INT、STRINGSなどをobjectsプロパティに割り当てることができ、それらはforeachループの外で存続するのはなぜですか。しかし、foreachループ内の親オブジェクトに割り当てられた場合、オブジェクトのプロパティは保持されませんか?

4

2 に答える 2

0

weekly_report_dm->getProjectHours($options)同じプライベート(?)プロパティへの参照を返すようです。これにより、各呼び出しが変更されます。次のコマンドで結果のクローンを作成してみてくださいclone

$data[$i]->data->proj_hours = clone $weekly_report_dm->getProjectHours($options);

参照を返さないように変更getProjectHoursするのが正しい解決策になります

于 2013-01-09T08:46:45.127 に答える
-1

上に、forループの外側に次を追加します。

$filler = array();

forループ内にこれを追加します:

$filler[] = $data[$i]->data->proj_hours;

その後、データをダンプしてみてください。

print_r($filler);

それがあなたにいくつかの結果をもたらすことを願っています。

于 2013-01-08T21:56:45.040 に答える