希望一个局部变量能够在函数调用之间保留它的值。
将变量声明为static
// 定义一个函数check_the_count,它接受一个参数$pitch,表示投球的结果。
function check_the_count($pitch){
// 使用static关键字定义两个静态变量$strikes和$balls,用于记录击球手的三振出局次数和获得保送(四球)的次数。
// 静态变量在函数多次调用之间保持其值。
static $strikes = 0;
static $balls = 0;
// 使用switch语句根据$pitch的值来决定执行哪段代码。
switch($pitch){case 'foul': // 如果投球结果为“犯规球”// 如果已经有两振,则不改变任何计数,直接跳出switch语句。// 注意:这里没有显式的break语句用于“犯规球”的情况,// 但在PHP中,如果case后面没有break,程序会继续执行下一个case的代码(fall-through行为),// 但在这里,由于“犯规球”后面紧跟的是“三振”的情况,而“三振”有一个break语句,// 所以这里的fall-through实际上不会影响逻辑。然而,为了代码的清晰性,最好加上一个break或注释说明。case 'strike': // 如果投球结果为“三振”$strikes++; // 三振次数加一break;case 'ball': // 如果投球结果为“好球”$balls++; // 好球次数加一break;
}// 检查是否达到三振出局的条件(三振)
if(3 == $strikes){$strikes = $balls = 0; // 重置三振和好球次数return 'strike out'; // 返回“三振出局”
}// 检查是否达到保送的条件(四球)
if(4 == $balls){$strikes = $balls = 0; // 重置三振和好球次数return 'walk'; // 返回“保送”
}// 如果既不是三振出局也不是保送,则返回“击球中”
return 'at bat';
}
// 定义一个数组$pitches,包含一系列投球结果。
$pitches = array('strike','ball','ball','strike','foul','ball','ball','strike');
// 定义一个空数组$what_happened,用于存储每次投球后的结果。
$what_happened = array();
// 遍历$pitches数组,对每个投球结果调用check_the_count函数,并将结果添加到$what_happened数组中。
// 同时,每次循环后打印$what_happened数组的内容,以及一个换行符,以便观察每次投球后的状态变化。
foreach($pitches as $pitch){
$what_happened[] = check_the_count($pitch);
print_r($what_happened); // 打印数组内容
print '
'; // 打印换行符,用于在网页上显示时换行
}
static变量可以在函数调用之间保留变量值,不过只是在一次脚本调用期间有效。如果
一个请求中访问了一个static变量,下一次请求同一个页面时这个变量并不会保留它的值。