在使用任何可能会被多次调用的函数时,我们都应考虑使用静态变量。静态变量让函数在多次被调用时记住变量的值,而这些变量并不是全局变量。
上一篇笔记说到了多维数组的排序需首先自定义排序函数。现在提出一个新的需求:统计递归的次数。那么我们就要使用静态变量了。
示例:使用静态变量
<?php
//创建数组
$students = array(
256 => array('name' => 'John', 'grade' => 98),
23 => array('name' => 'Tom', 'grade' => 85),
9 => array('name' => 'Steve', 'grade' => 94),
363 => array('name' => 'Robert', 'grade' => 83),
69 => array('name' => 'Jack', 'grade' => 78)
);
//按名字排序
/*$count是一个静态变量它的初始值为1,它的赋值操作只在函数第一次被调用执行(因为它是一个静态变量),然后下一条语句打印递归次数,
*最后$count的值加1
*/
function name_sort($x, $y) {
static $count = 1;
echo "<p>Iteration $count: {$x['name']} vs {$y['name']}</p>\n";
$count++;
return strcasecmp($x['name'], $y['name']);
}
//按成绩排序
function grade_sort($x, $y) {
static $count = 1;
echo "<p>Iteration $count: {$x['grade']} vs {$y['grade']}</p>\n";
$count++;
return ($x['grade'] < $y['grade']);
}
uasort($students, 'name_sort');
echo "<pre>".print_r($students,1)."<pre>";
uasort($students, 'grade_sort');
echo "<pre>".print_r($students,1)."<pre>";
?>
我们来看一下运行结果:
总结一下:在可能会被多次调用的函数中,我们应考虑使用静态变量,静态变量让函数在多次被调用时记住变量的值,而这些变量不是全局变量。