如何从函数中访问循环变量?

时间:2014-10-09 10:02:24

标签: php

我有一个循环,它将调用该函数。在第一个循环中定义(并在每次迭代时重新分配)变量,这些变量是函数运行所必需的。

循环:

if ($something) {
    while (!$recordSet->EOF) {
       $variable1 = TRUE;
       $variable2 = FALSE;
       ...
       function1()
    }
}

功能:

function function1() {
   if ($variable1 && !$variable2) {
      ...
   }
}

变量将具有布尔值,并且环境仅限于PHP 4.

我目前正在考虑在while循环和function1中使用global $variable1;,但我知道全局变量几乎总是不受欢迎。

通常我会使用define("variable1","a value"),但值会多次更改。

在这种情况下,是否有任何建议或全局定义最佳解决方案?

感谢。

编辑:完全忘了提及。这个文件实际上是一个意大利面条遗留代码,而function1在一百个不同的地方被调用,所有这些都有不同的信息。否则,我会使用参数。

1 个答案:

答案 0 :(得分:1)

在主要范围内,定义global $variable1global $varible2

在功能中也这样做。 但这是最糟糕的解决方案。如果这些变量在其他地方发生变化,你会感到困惑。

我认为最好的方法是重构代码,并将可变数作为参数传递。

另一个解决方案可能是为这两个变量创建一个类,并静态设置/获取它们。

class variablesPlaceHolder {

    private static $variable1;

    private static $variable2;

    public static function getVariable1() {
        return self::$variable1;
    }

    public static function getVariable2() {
        return self::$variable2;
    }

    public static function setVariable1($variable1) {
        self::$variable1 = $variable1;
    }

    public static function setVariable2($variable2) {
        self::$variable2 = $variable2;
    }
}

并在文件中包含此类,您要使用它们,并致电variablesPlaceHolder::setVariable1(anyValue) variablesPlaceHolder::getVariable1()