我在类中使用递归函数。函数更改变量$estados
的值。在第一次调用中,一切正常,在第二次调用中函数更改函数最后一次调用的变量值。
这是我的密码。
class Trab3Code
{
public function fechoEpsilon($automato, $estado)
{
$estados = $automato->transicao($estado, '&');
$fechos = array();
if (!empty($estados)) {
foreach ($estados as $elemento) {
$fechos[] = $this->fechoEpsilon($automato, $elemento);
}
}
$estados[] = $estado;
return array_unique(array_merge($estados, $fechos));
}
}
我从$automato
变量的函数中得到了$estado
变量的新值。函数的返回是一个数组。在第一次运行中,一切都很好。在第二次运行时,函数的返回将是一个空数组,它将覆盖第一次运行的先前值。
有人能帮我吗?
---编辑---
我的函数的第一个调用是fechoEpsilon($automato, 0)
。也就是说,$estados
的值应该至少包含:
array(
0 => 1
1 => 3
)
第一次呼叫的结果是什么但我得到的是一个空数组。或者一个只有0
值的数组,该值在行中设置
$estados[] = $estado;
很抱歉,如果它看起来很复杂,这是一部关于自动化的作品。fechoEpsilon
函数计算自动机内部状态的Epsilon闭包。
我知道这个值在变化,不知道是怎么变化的,但它确实在变化。如果我在调用中转储变量的值,它就会变化,最后,我的最终值是上一次调用中的值,这是一个空数组。对静态方法调用感到抱歉,这是我的错误,我正在与$this
一起使用。我更新了代码。
好吧,我不知道发生了什么,我去掉了array_unique函数,现在一切都很好。
显然,使用array_unique有问题,因为在代码的某些部分,我在数组中得到了一个数组。不知怎么搞砸了一切。
感谢大家对o/