if
if结构是很多语言的重要特性之一,允许按照条件执行代码片段,结构如下:if (expr)
statement
如果表达式expr的值为true,则执行statement语句,如果为false则忽略。如果要执行多条语句则需要用{}包围起来:
if (expr){
statement1
statement2
}
表达式expr的值会自动
转换为布尔类型的值。
else
在满足某个条件时执行某些语句使用if,而在不满足条件时执行其他语句使用else。else延伸了if结构,在if表达式值为false时,执行else结构中的语句。if (expr){
statement1
}else{
statement2
}
elseif/else if
elseif/else if是if和else的组合,和else一样是if的延伸,可以在if表达式为false时执行不同语句,与else不一样的是,仅在elseif的表达式为true时执行。if (expr){
statement1
}elseif{
statement2
}else{
statement3
}
while
while循环是PHP中最简单的循环结构。只要while的表达式的值为true就会重复执行while中的语句。每次循环开始时,都会检查表达式的值。while格式如下:while(expr){
statement1
statement2
statement3
}
do-while
do-while与while类似,不同的是表达式的值是在循环结束时检查,因此与while相比,do-while可以保证循环体中语句至少执行一次。do{
statement1
statement2
statement3
}while(expr);
for
for循环是PHP中最复杂的循环结构,for循环结构如下:
for(expr1,expr2,expr3){
statement1
statement2
statement3
}
表达式expr1在循环开始前求值一次,表达式expr2在每次循环开始前求值,如果为true,则循环继续,执行for循环中的语句,如果为false,则终止循环。表达式expr3在每次循环后求值。每个表达式都可以为空或者逗号分隔的多个表达式,所有逗号分隔的表达式都会计算,但只取最后一个结果,如果expr2为空,则会一直循环下去。
foreach
foreach语法结构提供了遍历数组的简单方式,foreach仅能应用于数组和对象,如果尝试应用于其他数据类型的变量或者未初始化的变量将产生错误信息。有如下两种格式:foreach (array_expression as $value){
statement
}
foreach (array_expression as $key => $value){
statement
}
第一种格式,在每次循环中都会将当前单元的值赋值给$value,并且数组内部的指针向前移一步。而第二种格式,除了值以外还会将单元的键赋值给$key。可以通过在$value之前加上&来修改数组的元素。$value的引用仅在被遍历的数组可以被引用(如是一个变量)时才可被引用。数组最后一个元素的$value引用在foreach循环之后仍会保留,建议使用unset()将其销毁。
<?php
function test(){
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
var_dump($arr);
// $arr is now array(2, 4, 6, 8)
unset($value); // 最后取消掉引用
}
test();
?>
break
结束当前for、foreach、while、do-while、switch结构的进行,break可以接受一个可选的数字参数来决定跳出几重循环,PHP5.4以后break 0不会再被解析为break 1,也不可以将变量做为参数传递给break。<?php
function test(){
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "At 5\n";
break 1; /* 只退出 switch. */
case 10:
echo "At 10; quit\n";
break 2; /* 退出 switch 和 while 循环 */
default:
break;
}
}
}
test();
?>
continue
continue用于在循环结构中跳过本次循环中剩余的代码并在循环条件表达式值为true时开始执行下一次循环,与break一样接受一个可选的数字参数来决定跳过几重循环到循环结尾,默认为1,即跳到当前循环结尾。continue后面的分号不能省略,够则会与下一行一起当作表达式求值,PHP5.4以后continue 0不会被解析为continue 1,也不可以将变量做为参数传递给continue。<?php
function test(){
$i = 0;
while ($i++ < 5) {
echo "Outer\n";
while (1) {
echo "Middle\n";
while (1) {
echo "Inner\n";
continue 3;
}
echo "This never gets output.\n";
}
echo "Neither does this.\n";
}
}
test();
?>
switch
switch结构类似于具有同一个表达式的一系列if语句,在需要将同一表达式与多个不同的值进行比较,并根据其等于哪个值来决定执行哪些代码的情况下适用。当一个case的值与switch语句匹配时,才开始执行语句,知道switch的程序段结束或者遇到第一个break;如果不在case语句段最后加上break,会继续执行下一个case中的语句段。switch中还有一个特殊的case :default,defalut匹配所有其他case都不匹配的情况。case表达式可以是任何值为简单类型的表达式,即整型、浮点型、字符串,不能使用数组或对象。
switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
case 2:
echo "i equals 2";
break;
default:
echo "another";
}