飞道的博客

PHP 开发 三(流程控制,函数)

389人阅读  评论(0)

流程控制

概念

  • 顺序结构:代码按顺序执行
  • 分支结构:写好代码,按条件执行
  • 循环结构:写好代码,按条件循环执行

一. 顺序结构

概念

  1. 执行第一行
  2. 执行第二行
  3. 执行完成,销毁资源

二. 分支结构

概念

  • if分支:互斥分支,根据条件执行下面的代码
  • switch分支:粒子分支,根据条件颗粒强度,选择一块或多块执行

三. if分支

if分支结构:

  • 简单if分支:只有一个代码块
    • if(条件表达式)(满足条件后执行的代码块)
  • 标准if分支:条件满足执行一个,不满足执行另一个
    • if(条件表达式)(满足条件后执行的代码块)else(不满足执行的代码块)
  • 复杂if分支:多个条件,条件递进
    • if(条件1)(满足执行)ifelse(条件2)(不满足条件1满足条件2执行)…
    • if分支只执行一个代码块
    • if分支可以嵌入多个if分支
  • 嵌套结构可以理解为复杂if分支的变种

用户提交表单

<!--2d.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dya2</title>
</head>
<body>
<!--<form action="2d.php">-->
<!--    内容:-->
<!--        <input  type="test" name="name"/>-->
<!--        <input  type="submit"/>-->
<!--</form>-->
<form action="2d.php" method="post">
    内容:
        <input  type="test" name="test"/>
         <input  type="submit"   value="POST"/>
</form>
<form action="2d.php" method="get">
    内容:
        <input  type="test" name="test"/>
        <input  type="submit"   value="GET"/>
</form>
<form action="2d.php"method="get">
    内容1:<input  type="test" name="test"/>
    内容2:<input  type="test" name="test2"/>
    <input  type="submit" value="GET提交"/>
</form>
<form action="2d.php"method="post">
    内容1:<input  type="test" name="test"/>
    内容2:<input  type="test" name="test2"/>
    <input  type="submit" value="POST提交"/>
</form>
</body>
</html>

3.1 简单if结构

#简单if结构
   @ $pack = $_REQUEST['test'];
    $weather = $pack;
    if($weather == 'good'){
   
        echo '出去走走';
    }

3.2 标准if结构

#标准if结构
    @$pack = $_REQUEST['test'];
    $weather = $pack;
    if($weather == 'good'){
   
        echo '出去走走';
    }else if($weather !='good'){
   
        echo '在家睡觉';
    }

3.3 复杂if结构

#复杂if结构
       @$pack = $_REQUEST['test'];
        $weather = $pack;
        if($weather == '出太阳'){
   
            echo '出去走走';
        }elseif($weather == '刮风'){
   
            echo '看电影';
        }else if ($weather == '阴天'){
   
            echo '看书';
        }else{
   
            echo '睡觉';
        }

3.4 嵌套结构

#嵌套结构
        @$pack = $_REQUEST['test'];
        @$pack_value = $_REQUEST['test2'];
        $weather = $pack;
        $weather_s = $pack_value;
        if($weather == '天气好'){
   
            if ($weather_s == '出太阳'){
   
                echo '出去走走';
            }else{
   
                echo '输入的啥玩意';
            }
        }else {
   
            if ($weather == '天气不好') {
   
                if ($weather_s == '阴天') {
   
                    echo '这天气碎觉不香?';
                }else{
   
                    echo '你还是在家躺着吧';
                }
            }
        }

四. switch分支

基本跟 C 一样

switch分支:一种接收颗粒条件的分支结构

  • switch分支:条件是具体值,而不是范围条件
  • switch代码块是写在一起的,使用 case 分开,而不是{}
  • switch代码块允许执行多个(如果有必要的话)

条件:

  • 条件必须是颗粒度的,通常是一个变量(没有比较符)
  • 确定可能出现的结果:一个条件一个 case 指令
  • 确定每个 case 指令下要执行的代码
  • 确定每个 case 指令是否需要结束
  • 使用break结束
  • 如果不结束,代码会以此执行下一个 case 里的代码块
  • 确定是否需要不满足条件代码块:default
    • 没有:结束
    • 有:确定 default 里的代码块
switch(条件变量){
   
    case:
        满足条件1要执行的代码块
        代码执行控制:break
...
default:
        不满足所有条件执行的代码块
        代码执行控制:break
    switch ($weather){
   
            case '大太阳':
                echo "没毛病出去走走";
                break;
            case '阴天':
                echo '看电影';
                break;
            case '不知道':     #没有break会接着下一个 case 执行
            case '雨天';
                echo '碎叫';
                break;
            default:
                echo '你输入的什么玩意';
                break;
        }

内在逻辑
直接匹配你输入的然后执行,没有匹配就执行 default ,没有default 就退出

switch 使用 固定分支结构 内部 == 比较
没有 break 多个 case 共享一个代码块

switch 能做的分支,if都能做,但是if能做的switch不一定能做

五. 循环结构

循环结构:通过条件限定,某个代码块进行可控循环。

  • 循环条件:判断是否继续循环
  • 循环条件的变化:让循环条件改变
  • 循环体:循环所执行的代码块
  • 循环控制:对循环的控制

PHP 中的几种循环结构:

  • while 循环:不确定循环多少次
  • for 循环:指定循环次数
  • foreach 循环:数组专用循环
  • do-while 循环:跟 while 差不多

5.1 while循环

while循环:指定边界条件,持续执行代码

  • while需要内部控制循环变量
  • 基本上都用于不太明确次数的循环
while(条件表达式){
   
    循环体;
    循环条件变更;
}

一般会定义一个循环比哪里初始值和一个边界条件
while 是利用外部循环条件实现循环的

#whlie 循环
//        $i = 0;
        $i = $pack;
        while ($i<=10){
   
            echo $i;    #12345678910
            $i++;
        }
TRUE
循环完成做判断
FALSE
执行开始
确定循环变量初始值
$i = 1
while 条件判定 $i<=10
进入循环体
循环变更
$i++
循环结束

5.2 for 循环

for 循环:将循环初始条件,循环边界条件,循环变更放在一起,一个结构里的循环方式。

  • for 需要初始化条件,在结构里或外面都可以
  • for 需要循环边界
  • for 需要条件变更
  • for 一般用于固定起始值,具有规律的循环
for(初始化表达式,边界判断表达式,条件变更表达式{
   

    循环体;
}
#for 循环
        echo "<br/>";
        $i = $pack;
        for (;$i< 100;$i++){
   
            if($i%2 == 1){
   
                echo "<br/>".$i.'是奇数';
            }else{
   
                echo "<br/>".$i.'不是奇数';
            }
        }

for 循环是线性输出的,一个循环就是一个线,两个循环就是一个面,三个循环就是立体

输出 乘法口诀表

#for 循环嵌套
        echo "<br/>";
        for ($i=1;$i<=9;$i++){
   
            for ($j=1;$j<=9;$j++){
   
                if ($j<=$i){
   
	                echo "$j x $i=". $j * $i."|";
                }
            }
            echo "<br/>";
        }

输出 1 - 100 的奇数流程图

TRUE
FALSE
循环开始
循环条件
$i =1
条件判定
$i <=9
进入循环体
执行循环体
循环结束

for 循环流程

  • 表达式1:用于初始化
  • 多个条件可以用,逗号分割初始化
  • 表达式2:用于验证条件
  • 循环体:执行循环操作
  • 表达式3:变更循环条件

5.2 foreach 循环

foreach 循环:php专门进行数组遍历的循环

  • foreach:循环可以解析数组的下标和值
  • foreach:语法
foreach(数组变量 as [下标变量 =>] 值变量){
   
    通过下标变量读取数组中每个元素的下标(可以没有)
    通过值变量读取数组中每个元素的值
}

步骤:

  1. 需要确定遍历的数组的下标
  2. 确定是否要用到下标
  3. 确定下标变量的值和变量
  4. 确定循环体
#foreach 循环
        echo "<br/>";
        $info = array(
            'name'=>'杨重煌',
            'age'=>'19',
            'sex'=>'男');

        foreach ($info as $key => $value){
   
            echo $key.':'.$value."<br/>";
        } # name:杨重煌age:19sex:男

数组里的元素都是通过元素指针访问的,默认指向第一个元素

有效
循环开始
重置数组指针 $info
当前指针所指元素
是否有效
取出元素
下标赋值给 $key
值赋值给 $value
数组指针下移
进入循环体
无效

5.3 do-while 循环

do-while循环 是先执行循环体 (do)然后在执行条件判断

  • do-while 循环需要条件边界
  • do-while 循环在内部变更循环条件
  • do-while 用来处理不明确条件的循环
  • do-while 语法
do{
   
    循环体
    循环变更条件
}while(循环条件判断);

步骤:

  1. 通常会定义一个循环初始值
  2. 确认循环体
  3. 如何变更循环条件
  4. 条件边界的判断
#do-while 循环
        $i = 0;
        do{
   
	        echo $i;
            $i++;
        }while($i<=10);

基本不使用 do-while

六. 循环控制

循环控制:

  • 循环体内控制代码的执行方向
  • 循环控制是为了增加程序的健壮性
  • 根据需求(条件)控制
    • 终止单次循环体:continue
    • 终止循环:break
  • 循环开始
    • 循环体内是否需要判定条件
    • 满足条件:选择控制
    • 确定控制层级(嵌套)
    • 条件不满足:不控制
# 循环控制 1-100非3的倍数的和
$s = 0;
        for ($i=1;$i<=100;$i++){
   
            if($i%3==0){
   
                continue;
            }$s +=$i;
        }echo $s;       #3367
# 求1-100和 要求内部控制
        echo "<br/>";
        $i = 0;
        $s = 0;
    while (true){
   
        if ($i > 100) {
   
	        break;
        }$s+=$i++;
    }echo $s;
#循环控制版 乘法表
    for ($i = 0;$i<=9;$i++){
   
        for ($j = 0;$j<=9;$j++){
   
            if ($j<=$i){
   
                if ($j ==0 and $i==0 or $j ==0) {
   
	                continue;
                }
                echo "$j * $i =". $j * $i."|";
            }else{
   
                break;
            }
        }echo "<br/>";
    }
#优化 乘法表
echo "<br/>";
	for ($i = 0;$i<=9;$i++){
   
		for ($j = 0;$j<=$i;$j++){
   
		    echo "$j * $i =". $j * $i." | ";
		}echo "<br/>";
	}

continue 流程控制

满足条件
需要
不需要
返回
循环开始
循环条件判定
大条件
不满足条件
执行循环体
内部条件判定
后续代码是否执行
后续代码继续执行

break 流程控制

满足条件
需要
不满足条件
循环开始
循环判定条件
大条件
执行循环体
内部条件判定
循环是否继续
后端代码继续执行
结束循环

七. HTML 标签语法

php是嵌入在html 中的
所以可能导致语法冲突 或者 可读性不高
如果在 html 中写php
if 分支
while循环
for 循环
foreach 循环
do-while 循环
等等都可以使用标签语法

标签语法通常不使用{} 使用:结尾 endfor 结束相应循环

标签语法是PHP 基本语法的替代方式
替代的{ 等于:(冒号)
替代的} 等于 end+标记内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table>
        <?php for ($i=1;$i<=9;$i++):?>
        <tr>
            <?php for ($j=1;$j<=$i;$j++):?>
                <td>
                    <?php echo "$j * $i = ".$j* $i; ?>
                </td>
            <?php endfor; ?>
        </tr>
        <?php endfor; ?>
    </table>
</body>
</html>

函数

  • 函数概念
  • 函数结构
  • 函数规范
  • 理解模块化编程 与 复用

函数有一个标识:函数名
函数的基本结构:

  • 关键字:function
  • 参数
  • 函数体
  • 返回值(return)
function 函数名(参数){
   
    函数体(代码块)
    return(返回值)
}
#模块化 乘法表
function mult(){
   
        for ($i=1;$i<=9;$i++){
   
            for ($j=1;$j<=$i;$j++){
   
                echo "$j * $i =".$i * $j." ";
            }echo "<br/>";
        }
    }
    mult();

一. 函数内存分析 与 形参实参概念

  • 函数的调用需要函数已经在内存中存在
  • 函数不会自动运行
  • 函数运算是在栈区开辟新的内存运行
  • 函数运行完后会释放所占用内存

1.1 一个模块化代码基本步骤流程

1. 编译:将代码加载到内存区

  • 读取代码
  • 编译(确认没有语法错误)
  • 加载到内存中

2. 执行

  • 代码按条件 顺序,分支循环执行
  • 函数的结构不会执行

3. 函数执行

  • 寻找函数名(调用地点)
  • 不存在(报错)
  • 存在(继续)

在栈区开辟内存加载函数

  • 处理参数
  • 函数体执行

函数执行结束

  • 栈区内存释放
  • 回到函数调用地点

程序执行结束

  • 释放所有内存
hello();
    function hello(){
   
        echo "hello PHP"."  ".__FUNCTION__; #魔术常量 获取函数名
    }

在php中,函数调用与函数没有先后顺序,但是建议把函数写在前面(先有,后用)

1.2 函数的参数

形参:

  • 函数在运用时为了增加灵活性添加的占位符。
  • 形参在定义时设置变量
  • 形参可以在内部使用
  • 形参跟函数外部的变量没有关系
  • 形参根据需求而定,理论不限(不要太多)

新参的作用:
在函数内部做假设运算(允许外部调整运算数据)

$n =100;
    function mult_n($n){
   
        for ($i=1;$i<=$n;$i++){
   
            for ($j=1;$j<=$i;$j++){
   
                echo "$j * $i = ".$j * $i." ";
            }echo "<br/>";
        }
    }
    echo "<br/> 外部参数 n = ".$n."<br/>";
    mult_n(3);

实参:

  • 函数在调用时传递进去的实际参数
  • 实参是调用函数时传递的数据
  • 实参可以时数据,也可以时保存数据的表达式
    • 通常有:
    • 数据常量
    • 变量
    • 常量
    • 运算表达式
  • 实参的本质是将自己赋值给形参
  • 实参需要对准形参(数量,顺序)及类型
  • 名字可以完全相同,形参跟实参之间完全不影响
function my_sum($a,$b){
   
        $c = $a + $b;
        echo "$a + $b = $c";
    }
    $a =3;
    define('实参b',123);  #定义常量
    my_sum(实参b,$a);     #123 + 3 = 126
    echo "<br/>";
    my_sum(1-2,$c=1+42);    #-1 + 43 = 42

形参默认值

  • 默认值是指定义形参给一个大概率会出现的值
  • 默认值在定义时赋值
  • 默认值是在调用时才给形参赋值
  • 有默认值后:
    • 调用时不传递实参,系统自动给形参赋值默认值
    • 调用时传递实参,系统会使用传递的,而不是默认的

让函数在没有调用时也能正常工作,增加灵活性

function default_p($s=9){
   
        $c = 0;
        if ($s == null){
   
            echo "9*9 乘法表:<br/>";
	        for ($i=1;$i<=9;$i++){
   
		        for ($f=1;$f<=$i;$f++){
   
			        echo "$f * $i = ".$f*$i." ";
		        }
		        echo "<br/>";
        }
        }else{
   
	        echo "$s*$s 乘法表:<br/>";
	        for ($i=1;$i<=$s;$i++){
   
		        for ($f=1;$f<=$i;$f++){
   
			        echo "$f * $i = ".$f*$i." ";
		        }
		        echo "<br/>";
	        }
        }
    }
    default_p();
    default_p(5);

二. 参数传值方式

参数传值方式指在函数调用时,实参传递给形参的方式

  • 传值方式有两种:
  1. 值传递:默认的,外部数据,如 function a($b);
  2. 引用传递:使用&符号,传递外部变量存储的内存地址,如 function a(&$b);

值传递不影响外部变量
引用传递会影响

#参数传值方式
	function pbv($n){
      #值传递
		while ($n>=1){
   
			echo $n--."<br/>";
		}
	}
    $n1 = 4;
    pbv($n1);
    var_dump($n1);  # 4
	function pbv2(&$n2){
       #引用传递
		while ($n2>=1){
   
			echo $n2--."<br/>";
		}
	}
	$n2 = 10;
	pbv2($n2);
	var_dump($n2);  # 0

三. 返回值

返回值:return

  • 函数都有返回值 默认为 null
  • 可以使用 return 返回任意类型
  • return 会强制结束函数 所以 只会接收第一个return
  • 需要一个接收 return 的变量
echo "<br/>";
    function re(){
   
        $a = __FUNCTION__;
    }
    $re = re();
    var_dump($re);

    function re2(){
   
        $a =__FUNCTION__;
        return $a;
    }
    $e = re2();
    echo $e;

四. 函数规则

函数的命名规则,基本与C相同

  • PHP函数不区分大小写
  • PHP由字母,下划线,数字组成,不能与数字开头
  • 函数命名尽量使用 下划线法与驼峰法
  • 函数是解决小问题的,越小复用性越高
  • 函数体内尽量不进行输出操作,函数只负责运算,不对结果负责(即结果 return 给外部处理)

转载:https://blog.csdn.net/qq_38626043/article/details/117231032
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场