我正在尝试了解函数内部的静态变量。所以我创造了这个:
<?php
// Create a function that has a counter
function counter_inside_function()
{
static $counter = 0;
++$counter;
return $counter;
}
// counter_inside_function() in a variable
$counter_function = counter_inside_function();
// Create a loop and place the function inside it
$count = 1;
while ($count < 11) {
echo $counter_function, '<br>';
// echo counter_inside_function(), '<br>';
$count++;
}
我原本期望增加柜台,但事实并非如此。但是,如果我取消注释第21行并直接回显函数(不是$ counter_function变量,那就是它递增的时候。我得不到的是它从2开始计数而不是1.但当我删除$ counter_function = counter_inside_function() ;我得到了我想要的结果。
答案 0 :(得分:0)
您应该在while循环中移动$counter_function = counter_inside_function();
,以便在每次迭代时调用该函数:
<?php
// Create a function that has a counter
function counter_inside_function()
{
static $counter = 0;
++$counter;
return $counter;
}
// Create a loop and place the function inside it
$count = 1;
while ($count < 11) {
$counter_function = counter_inside_function();
echo $counter_function, '<br>';
$count++;
}
答案 1 :(得分:0)
当您在第13行调用函数counter_inside_function()并将其返回值存储到变量中时,您已经运行了该函数一次并返回1.现在,因为counter_inside_function()中的变量是静态它将在下次调用时保持该值。这就是为什么它似乎从2开始时真的你在while循环之前将它增加到1然后在循环中看起来好像它从2开始。
现在循环的问题是你回显变量$ counter_function 20次并不意味着你正在调用函数counter_inside_function()20次。您所做的只是在第一次调用(即1)时将其中存储的数字取出并将其回显20次。因此,如果删除第21行的注释并删除第13行的函数调用(以便在循环开始之前它不会增加到1),程序将为您提供所需的结果。
这就是你的代码的样子:
// Create a function that has a counter
function counter_inside_function()
{
static $counter = 0;
++$counter;
return $counter;
}
// Create a loop and place the function inside it
$count = 1;
while ($count < 11) {
$counter_function = counter_inside_function();
echo $counter_function, '<br>';
$count++;
}