0. 流程控制

任何 PHP 脚本都是由一系列语句构成的。

一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句)。

语句通常以分号结束。

此外,还可以用花括号将一组语句封装成一个语句组。

语句组本身可以当作是一行语句。

1. 运算符

运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。

运算符可按照其能接受几个值来分组。

一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。

二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。

最后是唯一的三元运算符 ? : ,可接受三个值;通常就简单称之为“三元运算符”(尽管称之为条件运算符可能更合适)。

2. 算术运算符

例子 名称 结果
+$a 标识 根据情况将 $a 转化为 int 或 float。
-$a 取反 $a 的负值。
$a + $b 加法 $a 和 $b 的和。
$a - $b 减法 $a 和 $b 的差。
$a * $b 乘法 $a 和 $b 的积。
$a / $b 除法 $a 除以 $b 的商。
$a % $b 取模 $a 除以 $b 的余数。
$a ** $b 求幂 $a 的 $b次方的值。

除法运算符总是返回浮点数。

只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。 整数除法可参考 intdiv()

取模运算符的操作数在运算之前都会转换成 int 。 浮点数取模可参考 fmod()

取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同

3.关系比较运算符

例子 名称 结果
$a == $b 等于 **true**
,如果类型转换后 $a 等于 $b。
$a === $b 全等 **true**
,如果 $a 等于 $b,并且它们的类型也相同。
$a != $b 不等 **true**
,如果类型转换后 $a 不等于 $b。
$a <> $b 不等 **true**
,如果类型转换后 $a 不等于 $b。
$a !== $b 不全等 **true**
,如果 $a 不等于 $b,或者它们的类型不同。
$a < $b 小与 **true**
,如果 $a 严格小于 $b。
$a > $b 大于 **true**
,如果 $a 严格大于 $b。
$a <= $b 小于等于 **true**
,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 **true**
,如果 $a 大于或者等于 $b。
$a <=> $b 太空船运算符(组合比较符) 当$a小于、等于、大于 $b时 分别返回一个小于、等于、大于0的 int 值。

注意:

==!=只比较值,不比较类型, 比如: 1 == "1" 结果为true

===!== 即比较值,也比较类型, 1=== "1"结果为false

4. 逻辑运算符

例子 名称
! $a Not(逻辑非) **true**
,如果 $a 不为 **true**
$a && $b And(逻辑与) **true**
,如果 $a 和 $b 都为 **true**
$a || $b Or(逻辑或) **true**
,如果 $a 或 $b 任一为 **true**

逻辑运算符具有短路特性:

&& 逻辑与短路: 当多个表达式逻辑与时,如果第一个表达式为假,那该表达式后的表达式短路处理

|| 逻辑或短路: 当多个表达式逻辑或时,如果第一个表达式为真,那该表达式后的表达式短路处理

5. 字符串连接运算符

运算符 说明 示例
. 连接运算符 课上4 - 图1b,将课上4 - 图2b连接成一个全新的字符串

如果连接字符串时,第一个运算数不是字符串,那么 连接符两边都要有空格,否则会报错

  1. echo "a" . 1;
  2. echo "<br>";
  3. echo 1 . "a";
  4. echo "<br>";
  5. // 报错
  6. // echo 1. "a";

6. 赋值/复合赋值运算符

运算符 说明 示例
= 赋值 课上4 - 图3a变量
+= 课上4 - 图4a = $a + 3
-= 课上4 - 图5a = $a – 3
*= 课上4 - 图6a = $a * 3
/= 课上4 - 图7a = $a / 3
%= 求模 课上4 - 图8a = $a % 3
.= 连接 $a .= 课上4 - 图9a = $a . $b

注意: 复合赋值运算符是一种简写形式,但是是一种独立的运算符,功能相当于展开形式,但实际计算并不展开.优先级比同功能运算符低.

7. 递增递减运算符

例子 名称 效果
++$a 前加 $a 的值加一,然后返回 $a。
$a++ 后加 返回 $a,然后将 $a 的值加一。
—$a 前减 $a 的值减一, 然后返回 $a。
$a— 后减 返回 $a,然后将 $a 的值减一。

$a++ / $a— : 先用 a 值 , 后进行运算

++课上4 - 图10a : 先进行运算,后使用计算后的 a 值

i++ , 先用后加

++i, 先加后用

8. 条件运算符

表达式1 ? 表达式2 : 表达式3

如果 “表达式1” 成立,则执行 “表达式2” ,否则执行 “表达式3”。

// 因为是运算符,所以是 cpu 直接加载运算的, 执行效率快. 简单的判断应用较多

// if 结构,是语言中的一种结构语法,由解释器执行,速度慢,, if 更直观,适用复杂结构的条件

9. 错误抵制符

@表达式

错误抑制符“@”,用于忽略表达式的错误信息。

10. 运算符优先级

11. isset() 函数

  1. isset(mixed $var, mixed $... = ?): bool

检测变量是否已设置并且非 **null**

12. empty() 函数

  1. empty(mixed $var): bool

检查一个变量是否为空

判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于**false**,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

13. 分支语句— if

对于 分支语句 ,我们并不陌生,几乎每门语言中都会存在,只是在语法书写上有些区别,但是实际功能差别不大.

if 会先进行表达式布尔求值。如果 表达式 的值为 **true**,PHP 将执行 statement1,如果值为 **false** ——将忽略 statement2

  • 格式一

    1. <?php
    2. if (expr){
    3. statement
    4. }
    5. ?>
  • 格式二

    1. <?php
    2. if (expr){
    3. statement 1
    4. }else{
    5. statement 2
    6. }
    7. ?>
  • 格式三

    1. <?php
    2. if (expr1){
    3. statement 1
    4. }else if (expr 2){
    5. statement 2
    6. }else if (expr3){
    7. statement 3
    8. }
    9. ...
    10. else {
    11. statement N
    12. }
    13. ?>
  • 练习

    1. 表单提交用户名和密码,判断是否为用户 tom, 密码是否为123,如果是显示登陆成功,否则显示用户名密码错误
    2. 改进上面的练习, 先判断用户名是否正确,给出用户提示,如果用户名正确,再判断密码是否正确,密码正确提示登陆成功,否则提示密码不正确.
    • index.html

      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
      6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
      7. <title>Document</title>
      8. </head>
      9. <body>
      10. <form action="test.php" method="get">
      11. <p>姓名: <input type="text" name="username" id="n"></p>
      12. <p>密码: <input type="password" name="passwd" id="p"></p>
      13. <p><input type="submit" value="提交"></p>
      14. </form>
      15. </body>
      16. </html>
    • test.php

      1. // 练习一
      2. <?php
      3. // 向客户端发送响应头信息
      4. header("Content-Type:text/html;charset=utf-8");
      5. // 获取客户端提交的查询参数数据
      6. $username = $_REQUEST["username"];
      7. $passwd = $_REQUEST["passwd"];
      8. // 判断用户名和密码
      9. if($username === "tom" && $passwd === "123"){
      10. echo "登陆成功";
      11. }else{
      12. echo "用户名密码错误";
      13. }
      14. ?>
    • test.php

      1. // 练习二
      2. <?php
      3. // 向客户端发送响应头信息
      4. header("Content-Type:text/html;charset=utf-8");
      5. // 获取客户端提交的查询参数数据
      6. $username = $_REQUEST["username"];
      7. $passwd = $_REQUEST["passwd"];
      8. // 判断用户名和密码
      9. if($username === "tom"){
      10. if($passwd === "123"){
      11. echo "登陆成功";
      12. }else{
      13. echo "密码不正确";
      14. }
      15. }else{
      16. echo "用户名不存在";
      17. }
      18. ?>

14. 分支语句— switch-case

  1. switch(表达式){
  2. case 结果1:
  3. 相关代码1;
  4. break;
  5. case 结果2:
  6. 相关代码2;
  7. break;
  8. ……
  9. case 结果n:
  10. 相关代码n;
  11. break;
  12. default:
  13. 默认代码;
  14. }

如果 “表达式” 的值等于 “结果1” ,则执行 “相关代码1”;

否则如果 “表达式” 的值等于 “结果2” ,则执行 ”相关代码2” ,往后以此类推。

另外,如果 ”表达式” 的值与所有 case 的值都不能匹配,则执行 default 的 “默认代码” 。