### PHP 4 完全中文手册

switch 复合条件判断

switch 复合条件判断，通常用于处理较复杂的条件判断，其每个子条件都包含在 case 指令部分。实际上，若使用许多类似的 if 指令，可以将它综合成 switch 循环。

语法如下：
switch (expr) {
case expr1:
statement1;
break;
case expr2:
statement2;
break;
:
:
default:
statementN;
break;
}
其中的 expr 条件，通常为变量名称。而 case 后的 exprN，通常表示变量值。冒号后则为符合该条件时将要执行的部分。注意：一定要用 break 跳离循环体。

<?php
switch (date("D")) {
case "Mon":
echo "今天星期一";
break;
case "Tue":
echo "今天星期二";
break;
case "Wed":
echo "今天星期三";
break;
case "Thu":
echo "今天星期四";
break;
case "Fri":
echo "今天星期五";
break;
default:
echo "今天放假";
break;
}
?>

很明显，上例用 if 处理将会很麻烦。在进行程序设计时，应将出现概率较大的条件放在前面，较少出现的条件放在后面，以增加程序的执行效率。上例由于每天出现的机率相同，所以不用注意条件的顺序。

其它流程控制

除了上面的流程控制指令之外，尚有 break 及 continue 两个流程控制指令。

break 用来跳出目前执行的循环，如下例

<?php
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
?>

continue 立即停止目前执行循环，并回到循环的条件判断处，见下例

<?php
while (list($key,$value) = each($arr)) {
if ($key % 2) { // 略过偶数
continue;
}
do_something_odd ($value);
}
?>

注意：在 BASIC 中常用的 goto 指令在 C 及 Borland Pascal 中或许可以使用。但在 PHP 中，由于其 Web Server Script 特性以及结构化特点，不能在 PHP 中使用 goto 无条件转移指令！

自定义函数

在 PHP 中，允许程序设计者将常用的流程或者变量等元素，组织成一个固定的格式。也就是说用户可以自定义函数或类。

PHP 中的函数 (function) 和 C 语言一样，包括有返回值及无返回值两种情况，不像 Pascal 分成函数 (function) 和程序 (procedure) 那么复杂。

在函数的名称上，PHP 对于大小写没有特别限制。可以在定义函数时写成大写的函数名，而在使用时使用小写的函数名。总之，对函数而言，不管大小写，只要注意名称没有重复即可。

以下是函数的使用语法：

function myfunc($arg_1, $arg_2, ..., $arg_n) {

// 执行一些步骤

return $retval;

}

在使用时，在自定义函数名称前应加入 function 的保留字，表示这是用户自定义函数。之后的 myfunc 可以是任何的英文字母开头的字符串，字符串开头不能是数字或下划线，在第一个字母后可以是阿拉伯数字或者是下划线。其它符号、中文字符等不能用作函数名。

$arg_1 到 $arg_n 为函数使用的参数，参数之间用逗号隔开。在参数后的大括号 {}，即为整个函数的部分。函数如果需要返回值，可使用 return 将值返回。参数允许事先定义初始值或默认值。有定义默认值的参数在使用函数时可以省略，但一定要放在没有配置默认值参数的后面，否则 PHP 在解析函数时，会出现错误。

另外就是参数的类型，只要参数是 PHP 支持的变量类型都可以使用，无论是数组、字符串、或是整数....等等。返回值也是一样。

下面分别给出使用默认值及不用默认值的两个例子：

<?php
function myfunc1($arg_1, $arg_2, $arg_3="我是默认字符串") {
echo $arg_1+$arg_2;
echo $arg_3."<p>\n";
}
myfunc(3, 4); // 参数 $arg_3 省略。
myfunc(6, 6, "不用默认值") // 输入参数 $arg_3。
?>

参数的值，通常使用传值方式输入。必要时，可以使用传址方式，传入参数的指针。方法就是在参数的前面加上 & 符号即可。如下例

<?php
function myfunc2(&$argstr) {
$argstr=ereg_replace("/", "-", $argstr);
}
$today="2000/01/01";
myfunc2($today);
echo $today; // 2000-01-01;
?>