PHP 简介03-运算符/流程控制

1. 运算符 Operation

PHP中运算符主要有以下七种

  • 算术运算符
  • 自增/自减运算符
  • 赋值运算符
  • 比较运算符
  • 拼接运算符
  • 逻辑运算符
  • 三元运算符

1.算术运算符

加 减 乘 除 取模(取余)

+ - * / %

取模(%)详解

​ 1)普通取模

1
2
3
4
var_dump(5%2);		#1
var_dump(1%2); #1
var_dump(2%2); #0

​ 2)高阶取模

​ ①取模的正负:取决于被除数的正负

1
2
3
4
5
var_dump(5%2);		#1
var_dump(5%-2); #1
var_dump(-5%2); #-1
var_dump(-5%-2); #-1

​ ②取模结果的范围:x~y

1
2
3
4
5
6
7
8
9
var_dump(0%3);		#0				# %3
var_dump(1%3); #1
var_dump(2%3); #2
var_dump(3%3); #0
var_dump(4%3); #1
var_dump(5%3); #2
var_dump(6%3); #0
var_dump(7%3); #1 # %3的结果永远在0~2之间,都小于3

1
2
3
4
5
6
7
8
9
var_dump(0%5);		#0				# %5
var_dump(1%5); #1
var_dump(2%5); #2
var_dump(3%5); #3
var_dump(4%5); #4
var_dump(5%5); #0
var_dump(6%5); #1
var_dump(7%5); #2 # %x的结果永远在0~x-1之间,都小于x

​ 若需求2~5,如何才能达到需求:

1
2
3
4
5
	0	~	?		#?=5-2=3	0~3为%4的结果
+ 2
-----------------
2 ~ 5 #即要达到2~5的结果,需要%4+2

​ 推理到x~y,则有:%(y-x+1)+x

1
2
3
4
5
	0	~	?			# ?=y-x 	为%[(y-x)+1]的结果
+ x
----------------
x ~ y # 即要达到x~y的结果,需要%(y-x+1)+x

2.拼接运算符 string

1.符号:

. 小数点

2.作用 :

​ 拼接变量与字符串 / 拼接变量与变量

3.实例:

1
2
3
4
5
6
7
8
$a='winter';
$b='fall';
$c='winter fall is the home of arya';
$c='$a $b is the home of arya'; #不识别,显示为$a $b
$c=$a.' '.$b.' is the home of arya'; #正常显示

echo $c;

3.赋值运算符 equal

主要有以下几种赋值运算符:

变量=值 赋值(先运算=右边的,再运算=左边的)

变量+=值 变量=变量+值
变量-=值 变量=变量-值
变量*=值 变量=变量*值
变量/=值 变量=变量/值
变量%=值 变量=变量%值
变量.=值 变量=变量.值

4.比较运算符 compare

​ 1.比较的结果都是布尔值(bool)

​ 2.运算符:

> >= 大于,大于等于

< <= 小于,小于等于

== 等于 (判断=两端的值是否相等)

=== 全等于 (判断两边的值和数据类型是否全部相等)

!= 不等于 (判断两边的值是否不相等)

!== 全不等于 (判断两边的值和数据类型是不是都不相等)

5.逻辑运算符 logic

类型 运算符 运算规则
逻辑与 && 两边全真才是真,一边为假即为假
逻辑或 || 一边为真即是真,两边为假才是假
逻辑非 真即是假,假即是真

6.自增/自减 increment

​ 1.自增运算符:++

​ 2.自减运算符:--

​ 3.易混乱点:

​ a++ 先返回a值,再给a+1

​ ++a 先给a+1,再返回a值

1
2
3
4
5
6
$a=10;
echo $a++; #输出a 10
echo $a; #输出a+1 11
echo ++$a; #输出a+1 12
echo $a; #输出a 12

7.三元运算符 three

​ 一元运算符: a++ a--

​ 二元运算符:a=b a%b a-b

​ 三元运算符:?:

1.定义:简化的if-else结构

2.格式:条件表达式 ? true环境 : false环境;

3.运算规则:

​ 当条件表达式成立时,进入true环境执行;当条件不成立时,进入false环境。

4.实例

echo 1+1==2?'yes!':'no';

补充:运算符优先级

PHP运算符优先级

2. PHP流程控制

在PHP中,主要有四种结构:顺序结构,分支结构,循环结构和异常结构,其中异常结构主要适用于面向对象,先不进行介绍。

1.顺序结构:代码从上往下依次执行;(参考HTML中文档流)

2.分支结构:通过 if / switch 来进行分支选择

3.循环结构:通过 for / while 来重复执行某一部分的代码

以下详细介绍分支结构和循环结构的具体内容

1.顺序结构(不介绍)

2.分支结构

1.单一分支结构:(if

  • if( 条件表达式 ) 一行代码;

    该结构只能影响紧跟在 if 后面的第一行代码,从第二行开始,就不受 if 判断结果的影响

  • if( 条件表达式 ){ 一个代码块; }

    该结构后面可以跟一整个代码块,通过复合结构(代码块), if 可以影响多条语句

2.双向分支结构(else

  • if( 条件表达式 ){ 代码段;}else{ 代码段;}

    if 语句的延伸,可以对不满足 if 条件的情况进行阐述

3.多向条件分支结构(elseif

  • if(条件表达式){代码块}elseif(条件){ ... }elseif(条件){ ... }...else{...}

    elseif 中只有一个被执行,多个条件是逻辑或的关系,只要有一个满足,就可以进入相应的true环境,优先处理包含范围较小的条件

4.巢状条件分支结构(if 嵌套)

  • ```

    if(条件表达式){
           if(条件表达式){
               if(条件表达式){
                    ...
               }else{ ... }
           }else{ ... }
       }else{ ... }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    这里的多个条件是逻辑与的关系,要同时满足才能进入最深的true环境

    5.多向条件分支结构(`switch`)

    - ```
    switch( 表达式 ){
    case 值1: 代码块1;break;
    case 值2: 代码块2;break;
    ...
    case 值n: 代码块n;break;
    default: 代码块n+1;
    }

    专门用于等值判断, switch 后面的表达式数据类型只能是整型或字符串,不能为bool 值;

    若不加 break ,会在匹配到值后继续向下执行后面的所有标识;

    default 代表不与之前所有值匹配的情况;

6.练习 简易计算器

需求: 由用户输入两组 数值, 并选择运算符, PHP根据运算符结算结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//1.接收数据:
$n1=empty($_GET['num1'])? null :$_GET['num1']; #三元运算符,若设置则赋值,未设置赋值null
//2.根据运算符选择计算方式
$result = null;
switch ($ope) {
case '+': $result = $n1 + $n2; break;
case '-': $result = $n1 - $n2; break;
case '*': $result = $n1 * $n2; break;
case '/': $result = $n1 / $n2; break;
}
//3.HTML表单提交
<input type="text" name="num1" value="<?= $n1 ?>">

<select name="ope">
<option value="+" <?= $ope == '+'?'selected':null ?> >+</option>
<option value="-" <?= $ope == '-'?'selected':null ?> >-</option>
<option value="*" <?= $ope == '*'?'selected':null ?> >&times;</option>
<option value="/" <?= $ope == '/'?'selected':null ?> >&divide;</option>
</select> #三元运算符,若选中默认显示,未选中为空

<input type="text" name="num2" value="<?= $n2 ?>"> #value输入提交时默认显示

//4.HTML中输出结果
<span> <?= $result ?> </span>


3.循环结构

1.while循环(当)

  • 格式:
1
2
3
4
5
6
$sum=1;									初始化;
while($num<=100){ while(条件){
echo $num; 代码块;
$num++; }
}

  • 循环规则:

    ​ 初始化 –> 条件 成立–> 代码块 –>条件(循环)

    ​ 不成立 –> 跳出循环

注意: while 循环常用来控制循环次数未知的循环结构,条件表达式的结果必须为 bool

2.do…while循环(直到)

  • 格式:
1
2
3
4
5
6
$num=1;								初始化;
do{ do{
echo $num; 代码块;
$num++; }while(条件);
}while($num<0);

  • 循环规则:

    ​ 初始化 –> 代码块 –> 条件 成立 –> 代码块(循环)

    ​ 不成立 –> 跳出循环

注意: do...while 是先执行一次代码块,然后判断是否符合条件,来决定是否继续循环;

while(条件) 后面要加上分号

​ 适合执行至少必须循环一次的情况。

3.for循环

  • 格式: for( 初始化 ; 条件表达式 ; 增量 ){ 代码块; }

  • 循环规则:

    初始化 –> 条件表达式 成立–> 代码块 –> 增量 –> 条件 –> 代码块(循环)

    ​ 不成立–> 跳出循环

  • 注意点:

    • for语句中的三部分可以部分或全部为空,如把第一部分初始化语句提到for语句之前,第二部分和第三部分提到for语句之内;(for的退化形式)

      • ```
        //把初始化提到for之前

        $num=1;
        for(;$num<10;$num++){echo $num;}
        
        1
        2
        3
        4
        5
        6
        7
        8
        9

        - ```
        //把第三部分增量提到for之内
        $num=1;
        for(;$num<10;){
        echo $num;
        $num++;
        }

      • ```
        //把第二部分条件表达式提到for之内

        $num=1;
        for(;;){
            if($num<10)break;
            echo $num;
            $num++;
        }
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12

        - for语句中的每个部分都可以写多个表达式,之间用 `,` 逗号隔开;

        #### 4.循环语句之间的区别

        - while语句先判断再执行,do...while语句先执行一次,再判断是否继续循环。
        - while语句计算机执行速度较快,for语句代码书写方便,排版整洁,使用程度较高。

        #### 5.for循环使用技巧

        - 当条件表达式为空或非false值时,程序条件永远满足,产生死循环

        $x=0;
        for(;;){

        echo $x.' ';
        $x++;
        

        }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    - 当条件表达式为与false等价(0 , 0.0,‘ ‘,...)时,程序认为条件不满足,不会执行;

    - 当初始化表达式为空时,false=0,初始值为0;

    - 当增量为空时,若条件成立则一直循环输出初始值;z



    ### 4.特殊流程控制符

    #### 1.continue

    当执行到continue时,会准备进入下一轮循环

    #### 2.break

    当执行到break时,会马上结束当前循环或者分支结构

    #### 3.die

    当执行到die时,整个程序结束(后面全部不会执行)(?断点调试?)

    ### 5.扩展使用

    ​ **需求:输出0~9,如果碰到4,跳过**

    for($i=0;$i<10;$i++){

      if($i!==4){
          echo $i.' ';
      }
    

    }

1

for($i=0;$i<10;$i++){
    if($i==4){
        continue;
    }echo $i.' ';
}
1
2
3

​ **需求:输出0~9,如果碰到4,就结束循环**

for($i=0;$i<10;$i++){
    if($i==4){
        break;
    }echo $i.' ';
}
1
2
3

​ **需求:输出0~9,如果碰到4,就结束程序**

    for($i=0;$i<10;$i++){
        if($i==4){
            die('111');
        }echo $i.' ';
    }
1
2
3
4
5
6
7
8
9
10
11

​ 结论:

- `continue` 只是跳过此次循环,继续下次循环;
- `break` 是结束本循环结构,继续后面的程序执行;
- `die` 是结束整个程序,后面的程序直接无效;(`exit` 同样)

## 5.HTML与PHP结合写法

1. `for` 和 HTML 混合写法:

   <?php  for()  ?>
       HTML代码块
   <?php  endfor  ?>
1
2
3
4
5



2. `if` 和 HTML 混合写法:

       <?php  if()  ?>
           HTML代码块
       <?php  endif  ?>

           <?php  if()  ?>
               HTML代码块(true环境)
           <?php  else:  ?>
               HTML代码块(false环境)
           <?php  endif  ?>
           
          <?php  if():  ?>
               html代码块 (true环境)
           <?php elseif(): ?>
               html代码块 (true环境)
           <?php elseif(): ?>
               html代码块 (true环境)
           <?php elseif(): ?>
               html代码块 (true环境)
           <?php else(): ?>
               html代码块 (false环境)
           <?php  endif ?>

```