对象被神秘覆盖

Már*_*pes 4 php oop

$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应相同。

mik*_*n32 5

您的问题是,粗略地说,对象是通过引用传递的。详细信息可以在文档中找到。

在您的第一个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在第一个循环的赋值过程中使用运算符(有关更多详细信息,请参见此处),或者仅使用关联数组。