博客列表 >0809-函数调用、分支循环、数组遍历和替代语法/模板语法

0809-函数调用、分支循环、数组遍历和替代语法/模板语法

三九三伏
三九三伏原创
2022年08月26日 12:37:53565浏览

一、PHP函数调用

除了直接调用

  1. 函数名(参数);

还可以使用如下两种调用:

  1. call_user_func(‘函数名’,参数)
  2. call_user_func_array(‘函数名’,[数组])即使有一个参数也推荐使用这种。

数组形式的参数列表有三个来源:
1、用户自定义的函数中的参数。
2、对象方法
3、类方法

示例代码:

  1. <?php
  2. $obj = new class(15000){
  3. public float $salary;
  4. public function __construct(float $salary)
  5. {
  6. $this->salary = $salary;
  7. }
  8. };
  9. echo gettype($obj). '<br>';
  10. echo $obj->salary. '<br>';
  11. function f(string $name): string{
  12. return 'hello'. $name;
  13. };
  14. echo f('网络').'<br>';
  15. echo call_user_func('f','电脑').'<br>';
  16. class demo1 {
  17. public function hello(string $name):string{
  18. return 'hello,'.$name;
  19. }
  20. }
  21. $obj = new demo1;
  22. // echo call_user_func([$obj, 'hello'],'类').'<br>';
  23. echo call_user_func_array([$obj, 'hello'],['类da']).'<br>';
  24. class demo2 {
  25. public static function hello(string $name):string{
  26. return 'hello,'.$name;
  27. }
  28. }
  29. echo call_user_func_array(['demo2','hello'],['路人甲']);

二、分支与循环

1. 分支

  1. <?php
  2. namespace _0809;
  3. $salary = 6000;
  4. // 流程控制:分支
  5. // 单分支
  6. echo '------单分支------'.'<br>';
  7. if ($salary <= 6000){
  8. echo "{$salary} 低于全国平均水平!<br>";
  9. echo '<br>';
  10. }
  11. $salary = 7000;
  12. // 双分支
  13. echo '------双分支------'.'<br>';
  14. if($salary <= 6000){
  15. echo $salary.'低于全国平均水平!'.'<br>';
  16. echo '<br>';
  17. }else{
  18. echo $salary.'高于全国平均水平!'.'<br>';
  19. echo '<br>';
  20. }
  21. // 双分支语法糖:三元运算符
  22. echo '------双分支语法糖------'.'<br>';
  23. echo $salary > 6000 ? $salary.'高于全国平均水平!'.'<br>'.'<br>':$salary.'高于全国平均水平!'.'<br>'.'<br>';
  24. $salary = 15000;
  25. // 多分支
  26. echo '------多分支------'.'<br>';
  27. if($salary < 0){
  28. echo $salary.'非法数值'.'<br>';
  29. echo '<br>';
  30. }
  31. elseif($salary <= 6000){
  32. echo $salary.'是全国平均水平!'.'<br>';
  33. echo '<br>';
  34. }elseif($salary > 6000 && $salary <= 20000){
  35. echo $salary.'是全国一般水平!'.'<br>';
  36. echo '<br>';
  37. }elseif($salary > 20000 && $salary <= 50000){
  38. echo $salary.'是全国中高水平!'.'<br>';
  39. echo '<br>';
  40. }else{
  41. echo $salary.'是全国顶尖水平!'.'<br>';
  42. echo '<br>';
  43. }
  44. $salary = 51000;
  45. // 多分支语法糖:switch
  46. echo '------多分支语法糖------'.'<br>';
  47. Switch(true){
  48. case $salary <= 6000:
  49. echo $salary.'是全国平均水平!'.'<br>';
  50. echo '<br>';
  51. break;
  52. case $salary > 6000 && $salary <= 20000:
  53. echo $salary.'是全国平均水平!'.'<br>';
  54. echo '<br>';
  55. break;
  56. case $salary > 20000 && $salary <= 50000:
  57. echo $salary.'是全国中高水平!'.'<br>';
  58. echo '<br>';
  59. break;
  60. default:
  61. echo "{$salary}是全国顶尖水平!<br>";echo '<br>';
  62. }

2. 循环

  1. <?php
  2. namespace _0809;
  3. //for循环
  4. $colors = ['红','黄','蓝'];
  5. echo '数组长度'.count($colors).'<br>';
  6. $list = '<ul style="border: 1px solid red">';
  7. for($i =0; $i < count($colors); $i++){
  8. $list .= "<li>{$colors[$i]}</li>";
  9. }
  10. $list .= '</ul>';
  11. echo $list;
  12. // while循环
  13. $i = 0;
  14. $list = '<ul style="border: 1px solid yellow">';
  15. while($i < count($colors)){
  16. $list .= "<li>{$colors[$i]}</li>";
  17. $i++;
  18. }
  19. $list .= '</ul>';
  20. echo $list;
  21. // do while循环
  22. $i = 0;
  23. $list = '<ul style="border: 1px solid green">';
  24. do {
  25. $list .= "<li>{$colors[$i]}</li>";
  26. $i++;
  27. }while($i < count($colors));
  28. $list .= '</ul>';
  29. echo $list;

三、数组遍历和模板语法

1. 数组遍历

  1. <?php
  2. namespace _0809;
  3. // $colors = ['红','黄','蓝'];
  4. // print_r($colors);
  5. // printf('<pre>%s</pre>',print_r($colors,true));
  6. // 索引数组的完整声明语法
  7. // $colors = ['0'=>'红','1'=>'黄','2'=>'蓝'];
  8. // printf('<pre>%s</pre>',print_r($colors,true));
  9. // // 关联数组,键名是字符串。
  10. // $user = ['id'=>'1','name'=>'大黄','score'=>'90'];
  11. // printf('<pre>%s</pre>',print_r($user,true));
  12. // echo '<hr>';
  13. // // 数组专用遍历foreach
  14. // // foreach($arr as $key=>$value){...}
  15. // foreach($user as $value){
  16. // echo $value.'<br>';
  17. // }
  18. // foreach($user as $key=>$value){
  19. // // echo $key.'=>'.$value.'<br>';
  20. // printf('[%s]=>%s <br>',$key,$value);
  21. // }
  22. // 二维数组
  23. // php用二维数组来表示从数据表中查询到的结果
  24. $users = [
  25. 0 => ['id'=>'0','name'=>'大蓝','gender'=>'0','score'=>'91'],
  26. 1 => ['id'=>'1','name'=>'大黄','gender'=>'1','score'=>'90']
  27. ];
  28. // printf('<pre>%s</pre>', print_r($users,true));
  29. // foreach + table 渲染到页面
  30. $table = '<table border="1px" width="400px" cellspacing="0" cellpadding="3px" align="center">';
  31. $table .= '<caption>用户信息表</caption>';
  32. $table .= '<thead bgcolor="#ccc">
  33. <tr>
  34. <th>编号</th>
  35. <th>用户名</th>
  36. <th>性别</th>
  37. <th>分数</th>
  38. </tr>
  39. </thead>';
  40. $table .= '<tbody align="center">';
  41. foreach($users as $user){
  42. // print_r($user);
  43. $table .= '<tr>';
  44. $table .= "<td>{$user['id']}</td>";
  45. $table .= '<td>'.$user['name'].'</td>';
  46. $table .= '<td>'.($user['gender'] ? '女':'男').'</td>';
  47. $table .= '<td>'.$user['score'].'</td>';
  48. $table .= '</tr>';
  49. }
  50. $table .= '</tbody>';
  51. $table .= '</table>';
  52. echo $table;

2. 模板语法

流程控制的替代语法/模板语法

  1. foreach -> endforeach
  2. for -> endfor
  3. if -> endif
  4. switch -> endswitch(Switch和第一个case之间不能有空格/换行,否则会报错。)
  1. <?php
  2. namespace _0809;
  3. $stus = [
  4. ['id' => 1, 'name' => '刘备', 'course' => 'js', 'score' => 83],
  5. ['id' => 2, 'name' => '关羽', 'course' => 'php', 'score' => 75],
  6. ['id' => 3, 'name' => '张飞', 'course' => 'js', 'score' => 52],
  7. ['id' => 4, 'name' => '孙权', 'course' => 'php', 'score' => 88],
  8. ['id' => 5, 'name' => '周瑜', 'course' => 'js', 'score' => 65],
  9. ['id' => 6, 'name' => '孔明', 'course' => 'php', 'score' => 53],
  10. ['id' => 7, 'name' => '赵云', 'course' => 'js', 'score' => 63],
  11. ['id' => 8, 'name' => '马超', 'course' => 'js', 'score' => 77],
  12. ['id' => 9, 'name' => '姜维', 'course' => 'php', 'score' => 93],
  13. ['id' => 10, 'name' => '黄忠', 'course' => 'js', 'score' => 41],
  14. ]
  15. ?>
  16. <style>
  17. table {
  18. width: 360px;
  19. text-align: center;
  20. border-collapse: collapse;
  21. }
  22. table caption {
  23. font-size: 1.3em;
  24. }
  25. table thead {
  26. background-color: lightcyan;
  27. }
  28. table th,
  29. table td, {
  30. border:1px solid #000;
  31. padding:5px;
  32. /* text-align: center; */
  33. }
  34. .active {
  35. color: red;
  36. }
  37. </style>
  38. <!DOCTYPE html>
  39. <html lang="en">
  40. <head>
  41. <meta charset="UTF-8">
  42. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  43. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  44. <title>Document</title>
  45. </head>
  46. <body>
  47. <table>
  48. <caption>学生成绩表</caption>
  49. <thead>
  50. <th>编号</th>
  51. <th>姓名</th>
  52. <th>课程</th>
  53. <th>成绩</th>
  54. </thead>
  55. <tbody>
  56. <!-- 遍历数据表的内容,渲染到页面中。 -->
  57. <?php foreach($stus as $stu): ?>
  58. <tr>
  59. <!-- <td><?=$stu['id'] ?></td>
  60. <td><?=$stu['name'] ?></td>
  61. <td><?=$stu['course'] ?></td>
  62. <td><?=$stu['score']?></td> -->
  63. <!-- <?php if($stu['score'] > 70): ?>
  64. <td><?=$stu['id'] ?></td>
  65. <td><?=$stu['name'] ?></td>
  66. <td><?=$stu['course'] ?></td>
  67. <td><?=$stu['score']?></td>
  68. <?php endif ?> -->
  69. <?php switch(true): ?><?php case $stu['score'] > 70: ?>
  70. <td><?=$stu['id'] ?></td>
  71. <td><?=$stu['name'] ?></td>
  72. <td><?=$stu['course'] ?></td>
  73. <td><?=$stu['score']?></td>
  74. <?php endswitch?>
  75. </tr>
  76. <?php endforeach?>
  77. </tbody>
  78. </table>
  79. </body>
  80. </html>

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议