$this->processes->data每当我打电话时,莫名其妙地得到扩展$this->load_operations()。我不真正理解为什么当我的代码明确不修改该对象时,该对象会发生变化。
我想念什么吗?
如果我$process在foreach中强制转换为数组,然后返回对象,$this->processes->data则不会得到扩展。
$process = (array) $process;
$process = (object) $process;
Run Code Online (Sandbox Code Playgroud)
$process = (array) $process;
$process = (object) $process;
Run Code Online (Sandbox Code Playgroud)
两者的结果print_r应相同。
您的问题是,粗略地说,对象是通过引用传递的。详细信息可以在文档中找到。
在您的第一个foreach循环中,您正在分配对的引用$this->processes->data->3。$this->operations->processes->3
foreach($this->processes->data as $process) {
$this->operations->processes->{$process->id} = $process;
}
Run Code Online (Sandbox Code Playgroud)
在下一个循环中,您将添加到刚刚建立的data属性$this->operations->processes->3作为对的引用 $this->processes->data->3。
foreach($this->tasks->data as $task) {
$this->operations->processes->{$task->processes_id}->data[] = (object) [
'machine' => [],
'task' => $task
];
}
Run Code Online (Sandbox Code Playgroud)
要解决此问题,您可以尝试clone在第一个循环的赋值过程中使用运算符(有关更多详细信息,请参见此处),或者仅使用关联数组。