如何在PHP中修改函数外的变量/更好的方法来做某事

Man*_*023 2 php variables function

我有一个脚本,包含以下部分:

function checkDays($oldDate){
    // calculate time
    // Print table row style based on number of days passed 
    // (eg less than 1 week, 1 week, 2 weeks, 3weeks+)
}

//Some code
checkdays($value)
Run Code Online (Sandbox Code Playgroud)

我想用一个计数器来计算每个时间段有多少条记录,函数本身就在一个循环内,所以它调用了表的每一行,而我似乎无法访问函数本身之外定义的变量所以我可以改变它们(例如,将一个计数器放在脚本的顶部并从函数中修改它).

有人说使用全局变量,但我知道这是一种风险,不推荐.有没有一种从函数中访问变量的简单方法?另外,有没有更好的方法来做我在这里做的总体事情?

Der*_*sed 5

我认为您所指的风险是register_globals,这完全是另一回事。

在函数内部,使用global关键字,例如

function myFunction($someParam) {
    global $counter;
    ++$counter;
    // do something
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以执行所谓的 pass-by-reference 来修改传递给函数的外部作用域中的变量,例如

function myFunction($someParam, &$counter) {
    ++$counter;
    // do something
}
Run Code Online (Sandbox Code Playgroud)

注意符号。

有关变量范围PHP 手册页提供了更多信息


Jak*_*e N 5

不要试图使用全局变量

您可以通过引用传递变量,这意味着传递实际变量而不是它的副本:

$count = 0;

//Some code
checkdays($value, $count);
checkdays($value, $count);
checkdays($value, $count);

// This will output 3
echo $count;

// Use a & to pass by reference
function checkDays($oldDate, &$count){
    // Your code goes here as normal
    // Increment $count, because it was passed by reference the 
    // actual variable was passed
    // into the function rather than a copy of the variable
    $count++;
}
Run Code Online (Sandbox Code Playgroud)

  • 我将这样说:一般来说,在编写应用程序时,使用所有变量和函数污染全局命名空间时,它被认为是错误的形式 - 这就是我们拥有命名空间和OOP的原因.但是,这里提出的解决方案与使用global关键字没有什么不同.它仍然修改在全局范围内定义和访问的变量.在我看来,它提供的优于"global"关键字,而不是使用不同变量作为计数器的能力,这与这个问题无关. (2认同)

aki*_*irk 4

您可能应该创建一个类并使用私有属性来存储所需的数据。