if
if示例1
$a = 3;
if($a > 0) {
echo '$a>0';
}
elseif($a == 0) { // 可以写成else if,效果一样
echo '$a==0';
}
else
echo '$a<0';
if示例2
$a = 3;
if($a > 0) :
echo '测试结果:';
echo '$a>0';
elseif($a == 0) : // 不能写成else if
echo '测试结果:';
echo '$a==0';
else :
echo '测试结果:';
echo '$a<0';
endif; // 这里必须有一个分号
if示例3
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>www</title>
</head>
<body>
<?php
$var = 10;
if($var > 0) {
?>
<p>var > 0</p>
<?php
}else{
?>
<p>var <= 0</p>
<?php
}
?>
</body>
</html>
if示例4
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>www</title>
</head>
<body>
<?php
$var = 10;
if($var > 0) :
?>
<p>var > 0</p>
<?php
else :
?>
<p>var <= 0</p>
<?php
endif;
?>
</body>
</html>
while
while示例1
$var = 0;
while($var < 10)
{
echo $var;
$var++;
}
$var = 0;
while($var < 10) :
echo $var;
$var++;
endwhile;
while示例2
<?php
$var = 0;
while($var < 10)
{
?>
<p>ppp</p>
<?php
$var++;
}
?>
<?php
$var = 0;
while($var < 10) :
?>
<p>ppp</p>
<?php
$var++;
endwhile;
?>
for
for示例1
for($i=0; $i<10; $i++)
{
echo $i;
}
for($i=0; $i<10; $i++) :
echo $i;
endfor;
for示例2
<?php
for($i=0; $i<10; $i++)
{
?>
<p>ppp</p>
<?php
}
?>
<?php
for($i=0; $i<10; $i++) :
?>
<p>ppp</p>
<?php
endfor;
?>
do-while
$var = 0;
do{
echo $var;
$var++;
}while($var < 10);
do-while没有冒号代替语法foreach
$arr = [1,2,3];
foreach($arr as &$val) // 引用方式遍历,可修改数组元素
{
$val *= 2;
}
unset($val); // 消除引用
foreach($arr as $key => $val) : // 可同时遍历到键和值
echo $key." => ".$val."\n";
endforeach;
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。
foreach只是方便遍历,如果不使用foreach,也可以用其它循环进行代替,例如:
$arr = [1,2,3];
foreach($arr as $key => $val) :
echo $key." => ".$val."\n";
endforeach;
// 等价于...
$arr = array(1, 2, 3);
reset($arr);
while (list($key, $val) = each($arr)) {
echo $key." => ".$val."\n";
}
其中,reset()函数将数组的内部指针指向第一个单元。each()函数返回数组中当前的键/值对并将数组指针向前移动一步。对于多维数组,foreach第一层遍历到的将是一下一层的数组,此时需要多层foreach循环,也可以使用list()直接提取到数组元素:
$arr = [
[1,3,5,7],
[2,4,6,8]
];
foreach($arr as list($a, $b, $c, $d))
echo $a.$b.$c.$d."\n";
foreach注意事项:
1.foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。
2.由于 foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。
3.引用方式的遍历仅在被遍历的数组可以被引用时才可用(例如是个变量)。
4.引用试试遍历时,最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。
5.foreach 不支持用"@"来抑制错误信息的能力。
break和continue
$arr = [
[1,2,3,4],
[5,6,7,8]
];
foreach($arr as $x) {
foreach($x as $y) {
if($y > 6) break 2;
if($y % 2 == 0) continue;
echo $y." ";
}
}
// 输出: 1 3 5
break和continue都可以带上一个可选的参数,以指定命令针对第几层循环,默认情况下参数为1,表示当前层。参数不能使用变量,也不能是0或其他非法值,否则出错。
switch
$a = 3;
$b = 4;
$c = 4;
switch(4)
{
case $a:
echo '$a';
break;
case $b:
echo '$b'; // 执行
break;
case $c:
echo '$c';
break;
default:
break;
}
switch(4) :
case $a:
echo '$a';
break;
case $b:
echo '$b'; // 执行
break;
case $c:
echo '$c';
break;
default:
break;
endswitch;
注意,switch和第一个 case 之间的任何输出(含空格)将导致语法错误
<body>
<?php
$var = 5;
switch($var) {
?>
<?php // 出错,这里必须顶格写,因为上一行 ?> 之后的换行符被认为是结束标记 ?> 的一部分,所以在 switch 和 case 之间不算有任何输出
case 1:
?>
<p>$var == 1</p>
<?php
case 5:
?>
<p>$var == 5</p>
<?php
}
?>
</body>
注意事项:
1.continue 语句作用到 switch 上的作用类似于 break。如果在循环中有一个 switch 并希望 continue 到外层循环中的下一轮循环,用 continue 2。
2.case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除引用成为简单类型。
3.switch表达式与case表达式的比较使用==而不是===
4.case表达式不要求是常量表达式
5.case和default之后可以使用分号来代替冒号
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。在switch中,要特别注意:
switch("a")
{
case 0:
echo '0'; // 输出0
break;
case "a":
echo "a"; // 不会输出a
break;
}
return语句
如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止 eval() 语句或者脚本文件的执行。
如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被 include 的或者 require 的,则控制交回调用文件。此外,如果当前脚本是被 include 的,则 return 的值会被当作 include 调用的返回值。如果在主脚本文件中调用 return,则脚本中止运行。如果当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件中止运行。
goto语句
PHP 中的 goto 与C语言中的 goto 类似,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。