Php 如何访问循环';函数中的变量是什么?

Php 如何访问循环';函数中的变量是什么?,php,Php,我有一个循环,它将调用函数。变量在第一个循环中定义(并在每次迭代中重新分配),这是函数运行所必需的 循环: 功能: function function1() { if ($variable1 && !$variable2) { ... } } 变量将具有布尔值,并且环境仅限于PHP4 我目前正在考虑使用global$variable1在while循环和function1中,但我知道globals几乎总是不受欢迎的 通常我会使用定义(“variable1”

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

循环:

功能:

function function1() {
   if ($variable1 && !$variable2) {
      ...
   }
}
变量将具有布尔值,并且环境仅限于PHP4

我目前正在考虑使用
global$variable1在while循环和function1中,但我知道globals几乎总是不受欢迎的

通常我会使用
定义(“variable1”,“a值”)
,但这些值会被更改多次

是否有任何建议,或者全球定义是这种情况下的最佳解决方案

谢谢


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

在主范围中,定义
global$variable1
global$variable2

也可以在函数中执行此操作。 但这是最糟糕的解决方案。如果这些变量在其他地方发生变化,您会感到困惑

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

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

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()

对不起,更新了这个问题。是的,这就是我目前所倾向的。这并不理想,但它会起作用的。重构的问题是页面有3k+行,大约40行是我自己的,还有无数其他文件依赖于它(报告生成脚本)。我想这一定是它。我编辑了我的评论,请检查一下。使用此占位符类,您无法直接覆盖变量的值。但是变量需要能够更改值,在循环的每次迭代中,它们可能会更改。但是您可以。只需调用variablesPlaceHolder::setVariable1(anyValue);在循环中,和variablesPlaceHolder::getVariable1();在函数中。啊,我想我误读了你之前的评论。谢谢,我现在将坚持使用globals,但当我(有一天!)获得重构整个东西的批准时,我将对此进行研究。标记为答案的。
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;
    }
}