php - 递归完成后,如何清除 PHP 中的静态变量?

标签 php recursion static-variables

例如,我在递归函数中有一个静态变量,我希望该变量在递归的每次调用中都是静态的,但是一旦递归完成,我希望重置该变量,以便下次我使用递归函数时,它会从头开始。

比如我们有一个函数:

<?php
function someFunction() {
    static $variable = null;
    do stuff; change value of $variable; do stuff;
    someFunction(); # The value of $variable persists through the recursion.
    return ($variable);
}
?>

我们可以像这样第一次调用该函数:someFunction(); 它将正常工作。然后我们再次调用它:someFunction(); 但这次它以 $variable 的先前值开始。我们如何在第一次调用该函数的递归后重置它,以便我们第二次调用它就像重新开始一样?

最佳答案

最简单的做法是将变量作为参数传递。我真的不会在这里乱用静态。

function someFunction($value = null) {
    do stuff; change value of $value; do stuff;
    someFunction($value); # The value of $variable persists through the recursion.
    return $value;
}

作为一般规则,您应该必须将参数传递给函数(除非它们对同一类中的类属性进行操作)...它们不应该是全局的,并且在递归的情况下,这可能不是一个好主意他们是静态的……把一个函数当作一个黑盒子……值进去……他们用/对他们完成工作,结果就出来了。他们不应该知道其他地方发生的事情。有一些异常(exception),但在 IMO 看来是极少数。

关于php - 递归完成后,如何清除 PHP 中的静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812953/

相关文章:

php - str_split并从mysql获取数据

php - 如何MySQL两个日期相加并与当前时间戳进行比较

algorithm - 在没有计算机的情况下可视化和求解递归方程

Common Lisp 中的递归、推值和斐波那契数列

c - 以下两个 C 程序(迭代和归纳)中哪一个对于查找第 n 个斐波那契数更有效?

c++ - Scala 相当于函数中的 C++ 静态变量

php - 使用 Paypal 沙盒时,请登录以使用 Paypal 沙盒功能

php - 如果浏览器是 IE,则更改文件扩展名

java - 如何在多个方法中使用一个变量?

c - 为什么此代码不生成重新声明错误?