PHP-递归函数,使用与上次调用相同的变量


PHP - Recursive function using same variable as the last call

我在类中使用递归函数。函数更改变量$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/

的帮助