跨函数调用持久存储局部变量的值

希望一个局部变量能够在函数调用之间保留它的值。
将变量声明为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变量,下一次请求同一个页面时这个变量并不会保留它的值。

posted @   kksllss  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示