【发布时间】:2020-02-29 13:53:48
【问题描述】:
每次我调用$this->load_operations() 时,$this->processes->data 都会以某种方式扩展。我真的不明白为什么当我的代码显然没有修改它时该对象会发生变化。
我错过了什么吗?
如果我将 $process(在 foreach 中)转换为数组,然后再转换回对象 $this->processes->data,则不会扩展。
$process = (array) $process;
$process = (object) $process;
class Test_library
{
private $processes;
private $tasks;
private $operations;
public function __construct()
{
$this->processes = (object) array(
'data' => (object) array(
'3' => (object) array(
'id' => '3',
)
)
);
$this->tasks = (object) array(
'data' => (object) array(
'5' => (object) array(
'id' => '5',
'processes_id' => '3',
),
'6' => (object) array(
'id' => '6',
'processes_id' => '3',
)
)
);
$this->operations = (object) array(
'processes' => (object) array(
'3' => (object) array(
'id' => '3',
'data' => array()
)
)
);
print_r($this->processes->data);
$this->load_operations();
print_r($this->processes->data);
}
private function load_operations()
{
if(!empty($this->processes->data))
{
foreach($this->processes->data as $process)
{
$this->operations->processes->{$process->id} = $process;
}
}
if(!empty($this->tasks->data))
{
foreach($this->tasks->data as $task)
{
$this->operations->processes->{$task->processes_id}->data[] = (object) [
'machine' => [],
'task' => $task
];
}
}
}
}
new Test_Library;
两个print_r的结果应该是一样的。
【问题讨论】:
-
请通过tour 了解 Stack Overflow 的工作原理,并阅读How to Ask 了解如何提高问题的质量。然后edit你的问题包括你的完整源代码作为minimal reproducible example,其他人可以测试。
-
@Progman 这在我看来是minimal reproducible example 的一个很好的例子。唯一缺少的是我添加的对象的实例化。