博客列表 >PHP中的流程控制与模板语法

PHP中的流程控制与模板语法

风车
风车原创
2022年08月14日 13:46:49643浏览

赋值

1.值传递

  1. // 赋值
  2. $a=3;
  3. // 更新
  4. $b=$a;

2.引用传递
在变量前 加 & 表示引用
使用引用传递,在值改变时,会同步更新原始变量的值
在引用传递时,并不是创建了一个新变量,而是通过引用的方式,用一个别名将原始变量引用,所以当值改变时,原始变量的值也会改变

  1. // 赋值
  2. $a=3;
  3. // 引用传递
  4. $b=&$a;
  5. $b=5;
  6. echo $a;

数据类型

1.基本类型
1.1 int 整数
1.2 float 浮点数
1.3 string 字符串
1.4 boolean 布尔类型

2.复合类型
将几个不同的基本类型值放在一起,叫复合类型
2.1数组:数组中可以放入不同的数据,是一种复合类型
2.2对象:对象也是一种复合类型

3.unll 类型(空类型)
当变量没赋值,直接赋值为null和被销毁时,返回null

4.资源类型
4.1文件路径,网址等都是资源类型

5.回调类型 callback
PHP中用字符串来传递函数,在PHP中,可以以任何方式传递函数,所以回调函数不止包括函数,还包括对象方法,静态方法等

call_user_func(调用的函数,参数列表) 调用用户的自定义函数(一般不推荐使用)

注释:下方定义了一个函数hallo,然后在后面调用call_user_func,在参数列表中直接将第一个函数和所需要的参数传入

  1. function hallo($gongzi){
  2. return $gongzi;
  3. };
  4. echo call_user_func('hallo', 1000);

call_user_func_array(调用的函数,参数列表) 这个调用中参数列表支持数组传入(尽量使用这个,特殊情况用第一个)

就比如下方定义了一个函数hallo ,在下方有一个数组, 在我们调用call_user_func_array 时,直接将所需要的第二个参数列表,以数组c的形式传入

  1. function hallo($gongzi,$renshu){
  2. return $gongzi+$renshu;
  3. }
  4. $c=[1000,2000];
  5. echo call_user_func_array('hallo',$c);

如果这个函数来自对象方法

注释:这里创建了一个类,里面有一个方法hallo
在下方new了一个实例对象obj
我们在调用时,将对象名和对象中的方法名放在第一个参数中,以数组的方式,将参数列表放在第二个参数中

  1. class Product
  2. {
  3. public function hallo($gong,$ren){
  4. return $gong+$ren;
  5. }
  6. }
  7. $obj=new Product();
  8. echo call_user_func_array([$obj,'hallo'],$c);

如果这个函数来自类方法

类方法调用,直接调用类名,不用调用对象名

  1. class Product
  2. {
  3. public static function hallo($gong,$ren){
  4. return $gong+$ren;
  5. }
  6. }
  7. echo call_user_func_array(['Product','hallo'],$c);

流程控制

分支

和JS一样,分支也分为单分支双分支和多分支
单分支

  1. $age = 15;
  2. if ($age >18){
  3. echo '可以看,还可以充钱开会员看';
  4. };

双分支

  1. $age = 15;
  2. if ($age >18){
  3. echo '可以看,还可以充钱开会员看';
  4. }else{
  5. echo '可以偷偷看';
  6. };

双分支三元运算符(语法糖)

  1. $age = 15;
  2. echo $age>18?'可以看,还可以开会员看':'可以偷偷看';

多分支
直接写语法糖了,反正原始的写法也用不着
多分支的语法糖是 switch(true){
case 允许条件
满足条件后运行的方法
break;
……(重复上面的语法)
default: 默认执行的方法
};
最后的default 是默认执行,就是在所有条件都不满足时,执行这个方法

  1. switch
  2. $age = 13;
  3. switch (true) {
  4. case $age >= 18 && $age < 30:
  5. echo "{$age}岁,彩礼,能按揭吗?<br>";
  6. break;
  7. case $age >= 30 && $age < 45:
  8. echo "{$age}岁,应该成个家了<br>";
  9. break;
  10. default:
  11. echo "{$age}岁,放学,我送你回家<br>";
  12. }

循环

循环的本质,也是分支
循环的三个条件:1.初始化循环条件 2.循环条件 3.更新循环条件(不更新就会死循环)

  1. // 循环目标
  2. $a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
  3. // count 可以获取当前数组的长度
  4. $c=count($a);
  5. // 初始化循环条件
  6. $i=0;
  7. while ($i<$c) {
  8. echo $a[$i];
  9. $i++;
  10. };

循环语法糖
for(初始化循环,循环条件,更新){执行方法};

  1. for($i=0;$i<$c;$i++) {
  2. echo $a[$i];
  3. };

continue 跳过某次循环,进入下一次循环(使用if来判断,满足条件就跳过)
break 提前结束循环 (也是使用if来判断,满足条件就直接停止循环)

数组遍历

数组类型

1.索引数组 :健名是数值,从0开始递增的正整数
2.关联数组 :健名是字符串

  1. $user=['name'=>'John', 'email'=>'john@example.com'];
  2. printf('<pre>%s</pre>', print_r($user,true));

数组遍历

forEach(数组名 as 健名=>对应的值){对象方法}

  1. $user=['name'=>'John', 'email'=>'john@example.com']
  2. foreach($user as $key=>$value) {
  3. echo $value."\n";
  4. }

二维数组

可以理解为一个大数组里面包含了多个小数组

  1. $user =[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]];

可以使用foreach+table 的方法以表格的方式将二维数组渲染到页面
PhP中“.=”表示赋值运算符,是字符串连接的意思,该运算符的使用语法如“$string .= string2;”,可以实现字符串拼接效果。

  1. $d='我是';
  2. $d .= '小学生';
  3. echo $d;

运行结果就是第一个字符串拼接第二个字符串

使用模板语法 写一个学生信息管理系统

html和php混编
这里用二维数组模拟从数据库接收的结果

  1. <?php
  2. namespace _0809;
  3. // 用二维数组来模拟数据表查询结果
  4. $stus = [
  5. ['id' => 1, 'name' => '刘备', 'course' => 'js', 'score' => 83],
  6. ['id' => 2, 'name' => '关羽', 'course' => 'php', 'score' => 75],
  7. ['id' => 3, 'name' => '张飞', 'course' => 'js', 'score' => 52],
  8. ['id' => 4, 'name' => '孙权', 'course' => 'php', 'score' => 88],
  9. ['id' => 5, 'name' => '周瑜', 'course' => 'js', 'score' => 65],
  10. ['id' => 6, 'name' => '孔明', 'course' => 'php', 'score' => 53],
  11. ['id' => 7, 'name' => '赵云', 'course' => 'js', 'score' => 63],
  12. ['id' => 8, 'name' => '马超', 'course' => 'js', 'score' => 77],
  13. ['id' => 9, 'name' => '姜维', 'course' => 'php', 'score' => 93],
  14. ['id' => 10, 'name' => '黄忠', 'course' => 'js', 'score' => 41],
  15. ]
  16. ?>

html部分
html部分采用php和html混编的方式,可以理解成在html标签中插入PHP代码,将HTML标签中需要输出的内容,直接用PHP代码从数据库中调用出来。
这里面有几个需要注意的地方
1.比如for或者if循环执行方法需要用大括号包裹,如果在混编时,开始大括号都用 : 表示,结束大括号用 endxxx 表示 例如
1.1 foreach - endforeach
1.2 for -> endfor
1.3 if -> endif
1.4 switch -> endswitch
2.在数据调用时候,可以使用<?= xxx?>的短语法替代<?php echo xxx?> 简化语法
3.php代码可以包裹在多个PHP标签中,会自动拼接运行,如果像下方混编的时候,会和HTML标签穿插运行在对应的标签中直接输出PHP调用的数据

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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>学生信息管理系统</title>
  8. <style>
  9. table {
  10. border-collapse: collapse;
  11. width: 360px;
  12. text-align: center;
  13. }
  14. table th,
  15. table td {
  16. border: 1px solid #000;
  17. padding: 5px;
  18. }
  19. table caption {
  20. font-size: 1.3em;
  21. }
  22. table thead {
  23. background-color: lightcyan;
  24. }
  25. .active {
  26. color: red;
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <!-- 表格 -->
  32. <table>
  33. <!-- 表名 -->
  34. <caption>学生成绩表</caption>
  35. <!-- 头部 -->
  36. <thead>
  37. <tr>
  38. <th>学号</th>
  39. <th>姓名</th>
  40. <th>课程</th>
  41. <th>成绩</th>
  42. </tr>
  43. </thead>
  44. <!-- 表格内容 -->
  45. <tbody>
  46. <?php
  47. // 遍历数据表的内容,并渲染到页面中
  48. // { => :
  49. // } => endforeach, endfor, ...
  50. foreach ($stus as $stu) : ?>
  51. <tr>
  52. <?php if ($stu['score'] >= 70) : ?>
  53. <td><?=$stu['id']?>
  54. </td>
  55. <td><?=$stu['name']?>
  56. </td>
  57. <td><?=$stu['course']?>
  58. </td>
  59. <td><?=$stu['score']?>
  60. </td>
  61. <?php endif ?>
  62. </tr>
  63. <?php endforeach ?>
  64. <?php
  65. /**
  66. *
  67. * 流程控制的替代语法/模板语法
  68. * 1. foreach - endforeach
  69. * 2. for -> endfor
  70. * 3. if -> endif
  71. * 4. switch -> endswitch
  72. */
  73. ?>
  74. </tbody>
  75. </table>
  76. </body>
  77. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议