(25)流程分支控制结构
流程:控制程序执行顺序
几乎没有程序是不需要流程控制的线性程序,除了HTML/CSS是没有流程控制的,程序中需要与用户相互交流,根据用户输入决定执行的序列,有循环的代码反复执行,这些都需要流程控制。所以在任何一门语言编程中都需要满足程序结构化的一些程序设置结构
流程控制:
一、顺序结构
二、分支结构(也叫条件结构也叫选择结构):对于那些先选择再执行的程序,构造合理的条件和分之流程,根据不同的流程选择是适当的分之语句。适合带有逻辑以及关系比较的一些条件判断的计算。不同的需求,不同的时机来选择者四种方式。每种分之结构都是通过相关的PHP语句完成的
1、单路分支:
//条件bool,只有这两种结果 true或false, 可以通过运算符的结合(> < == != & || ! )以及函数判断 isset()等
if(条件) //有就执行。没有继续向下走
执行下面一条语句 //执行一条语句不需要加{}
if(条件)
{
代码段; //执行多条语句需要加{}
代码段;
}
例如:$a=100;
$b=50;
if($a < $b){
$t=$a;
$a=$b;
$b=$t;
}
var_dump($a > $b);
2、双路分支:
使用else从句
if(条件)
执行一条语句
else
执行一条语句
if(条件){
一条或多条代码
}else{
一条或多条代码
}
例如:$a=100;
$b=20;
if($a > $b){
echo "$a 大于 $b<br>";
}else{
echo "$a 小于 $b <br>";
}
echo "###############<br>";
3、多路分支:
可以使用 if else if 和 switch case
//这是一种互斥的关系。也就是说每一种情况只能出现在下面唯一的一个条件里,不可以重复,出现在第一个,就不能出现在第二个,即使第一个、第二个都满足条件。
(1) if(条件){
}else if(条件){ //否则。。。。。
}else if(条件){ //否则。。。。。
}else if(条件){ //否则。。。。。
}else{
}
例如:$hour=date("H"); //11 互斥的,例如5点啊,它既满足下雨6点,也满足小于9点,那岂不是重复了嘛?我们要记住因为它是互斥的。只要进入第一个就不能进入第二个。
if($hour < 6){
echo "凌晨好";
}elseif($hour < 9){
echo "早上好";
}elseif($hour < 12){
echo "上午好";
}elseif($hour < 14){
echo "中午好";
}elseif( $hour < 17){
echo "下午好";
}elseif($hour < 19){
echo "傍晚好";
}elseif($hour < 22){
echo "晚上好";
}else{
echo "夜里好";
}
(2) switch(变量){
case 值:
代码;
break;
case 值1:
代码;
break;
default:
代码;
}
例如:$week=date("D");
$week=111;
//swinch(变量) 变量只用整型和字符串,显然浮点型是不可以的,bool型不方便
//如果变量没有匹配的值则执行default中的区域,需要就可以加上
//break 是退出switch, 用来设置多个值匹配执行同一段代码
switch($week){
case 1:
case 11:
case 111:
case 1111:
case 11111:
echo "111111111111<br>";//以上数字都会被输出“11111111111”,如果是1112,那么,就会一直走到底部,输出周末
break;
case "Mon":
echo "星期一";
break;
case "Tue":
echo "星期二";
break;
case "Wed":
echo "星期三";
break;
case "Thu":
echo "星期四";
break;
case "Fri":
echo "星期五";
break;
default:
echo "周末";
}
当然我们用if else也可以做出来。会很麻烦。例如,输出一个学生成绩的范围60分~80分,因为60分~80分不止20个数,还有60.5等等,所以范围的用if else ,单个值的用switch。
4、嵌套分支:(嵌套最好不要超过五层)
if(){
if(){
}else{
if(){
}
}
}else{
if(){
}else{
swicth(){
}
}
}
例如;$sex=$_GET["sex"];
$age=$_GET["age"];
if($sex=="nan"){
if($age >= 60){
echo "这个男士已经退休".($age-60)."年了";
}else{
echo "这个男士还在工作,还有".(60-$age)."年才退休<br>";
}
}else{
if($age >= 66){
echo "这个女士已经退休".($age-55)."年了";
}else{
echo "这个女士还在工作,还有".(55-$age)."年才退休<br>";
}
}
三、循环结构
(26)PHP实现简单计算器
<html>
<head>
<title>PHP实现简单计算器</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<?php
$num1=true;
$num2=true;
$numa=true;
$numb=true;
$message="";
//单路分支
if(isset($_GET["sub"])){
if($_GET["num1"]==""){
$num1=false;
$message.="第一个数不能为空";
}
if(!is_numeric($_GET["num1"])){ //判断num1是不是数字类型,是就返回真,不是就返回假。
$numa=false;
$message.="第一个数不是数字";
}
if($_GET["num2"]==""){
$num2=false;
$message.="第二个数不能为空";
}
if(!is_numeric($_GET["num2"])){ //判断num2是不是数字类型,是就返回真,不是就返回假。
$numb=false;
$message.="第二个数不是数字";
}
if($num1 && $num2 && $numa && $numb) {
$sum=0;
//多路分支switch
switch($_GET["ysf"]){
case "+":
$sum=$_GET["num1"]+$_GET["num2"];
break;
case "-":
$sum=$_GET["num1"]-$_GET["num2"];
break;
case "x":
$sum=$_GET["num1"]*$_GET["num2"];
break;
case "/":
$sum=$_GET["num1"]/$_GET["num2"];
break;
case "%":
$sum=$_GET["num1"]%$_GET["num2"];
break;
}
}
}
?>
<body>
<table align="center" border="1" width="500">
<caption><h1>计算器</h1></caption>
<form action="jsq.php">
<tr>
<td>
<input type="text" size="5" name="num1" value="<?php echo $_GET["num1"] ?>" > //为了运算后,原数据还保留在输入框中,我们加上value值。
</td>
<td>
<select name="ysf">
<option value="+" <?php if($_GET["ysf"]=="+") echo "selected" ?>>+</option>
<option value="-" <?php if($_GET["ysf"]=="-") echo "selected" ?>>-</option>
<option value="x" <?php echo $_GET["ysf"]=="x"?"selected":"" ?>>x</option>
<option value="/" <?php echo $_GET["ysf"]=="/"?"selected":"" ?>>/</option>
<option value="%" <?php echo $_GET["ysf"]=="%"?"selected":"" ?>>%</option>
</select>
</td>
<td>
<input type="text" size="5" name="num2" value="<?php echo $_GET["num2"] ?>">
</td>
<td>
<input type="submit" name="sub" value="计算">
</td>
</tr>
<?php
if(isset($_GET["sub"])){
echo '<tr><td colspan="5">';
if($num1 && $num1 && $numa && $numb){
echo "结果:".$_GET["num1"]." ".$_GET["ysf"]." ".$_GET["num2"]." = ".$sum;
}else{
echo $message;
}
echo '</td></tr>';
}
?>
</form>
</table>
</body>
</html>