今晚只要学习了PHP流程控制 函数 函数封装 iframe ,作业是使用foreach/if替代语法循环遍历二维数组;制作:员工管理系统后台首页。
一、流程控制语句
在日常开发中,数据来自数据库,通常以二维数组的形式传送过来,我们通常用foreach变量关联数组。想把数据呈现出来,一般通过遍历化解成一维数组,然后再通过数组的键来得到值。具体代码可以看作业1。当然,流程控制不止有遍历,还有判断,例如if switch。
二、流程控制语句的替代语法
替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。 个人认为,这种简写形式能够不破坏原有代码结构,方便修改。
三元运算符也是一种替代语法,它相当于if else语句的简写。形如:判断条件语句?条件为true的执行语句:条件为false的执行语句;
三、函数
函数的声明和调用同js一样。
函数可以调用参数,参数有默认参数和可选参数之分。例如:function demo02($a, $b= 50) $b为默认参数,他必须再必选参数($a)的后面;再函数调用时$b就是可选参数 如果只填入一个必须参数那么就是默认值50,如果填入那么就是用户自定义的值;
可变参数,就是声明时不固定设置参数,通过遍历来实现,func_num_args()获取函数的参数数量,func_get_args()获取函数参数的值的列表 func_get_arg()获取参数值列表相应索引的值。代码看下面分享的课程代码。
匿名函数,他是一种临时函数,主要用作函数回调参数的值。
函数表达式,通俗的来说一个变量的值为函数,那么这个变量就是函数表达式。匿名函数的一个使用场景就是作为表达式的参数值回调使用。call_user_func()/call_user_func_array()可以以回调方式执行一个函数。
四、函数封装
用一个案例来说明。
实例
<?php // 员工信息 $staffs = [ ['id'=>1, 'name'=>'候亮平', 'age'=>30, 'sex'=>1, 'email'=>'hlp@php.cn', 'password'=>sha1('123456')], ['id'=>2, 'name'=>'赵瑞龙', 'age'=>40, 'sex'=>1, 'email'=>'zrl@php.cn', 'password'=>sha1('123456')], ['id'=>3, 'name'=>'李达康', 'age'=>50, 'sex'=>1, 'email'=>'ldk@php.cn', 'password'=>sha1('123456')], ['id'=>4, 'name'=>'祁同伟', 'age'=>45, 'sex'=>1, 'email'=>'qtw@php.cn', 'password'=>sha1('123456')], ['id'=>5, 'name'=>'高小琴', 'age'=>30, 'sex'=>0, 'email'=>'gxq@php.cn', 'password'=>sha1('123456')], ]; // 标题 $title = '用户信息表'; // 表格标题 $tableTitle = $title; // 员工数量 $total = count($staffs); // 创建函数: 动态生成员工表格 // 函数参数: 表格数据(数组) function createTable($staffs) { $result = ''; foreach ($staffs as $staff) { $result .= '<tr>'; $result .= '<td>' . $staff['id'] . '</td>'; $result .= '<td>' . $staff['name'] . '</td>'; $result .= '<td>' . $staff['age'] . '</td>'; $result .= '<td>' . ($staff['sex'] ? '男' : '女') . '</td>'; $result .= '<td>' . $staff['email'] . '</td>'; $result .= '<td>' . $staff['password'] . '</td>'; $result .= '</tr>'; } return $result; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title><?php echo $title; ?></title> <style> table,th,td { border: 1px solid #666; padding: 8px; } table { border-collapse: collapse; width: 80%; text-align: center; margin: 30px auto; } thead tr:first-of-type { background-color: lightblue; } table > caption { font-size: 1.2rem; margin-bottom: 15px; } table + p { text-align: center; } </style> </head> <body> <table> <caption> <?php echo '<span style="color:red">' . $tableTitle . '</span>'; ?> </caption> <thead> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>邮箱</th> <th>密码</th> </tr> </thead> <tbody> <?php echo createTable($staffs); ?> </tbody> </table> <p>总计: <?php echo $total; ?> 人</p> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
五、课程代码及作业代码
课程:
实例
<?php // 函数声明 function demo1 ($a, $b) { return "{$a} + {$b} =".($a + $b); } echo demo1(10, 20); echo '<br>'; // 可选参数 | 默认参数 // 默认参数必须是第二个 function demo2 ($a, $b=90) { return "{$a} + {$b} =".($a + $b); } echo demo2(10); echo '<br>'; echo demo2(40, 60); echo '<br>'; // 可变参数 // func_get_args() 获取参数列表数组 // func_get_arg(n) 获取参数列表中某一元素 // func_num_args() 获取元素的数量 function demo3() { $sum = 0; for ($i=0; $i<func_num_args(); $i++) { $sum += func_get_arg($i); } // 拼装参数相加的表达式字符 $equ = ''; foreach (func_get_args() as $value) { $equ .= $value . '+'; } // 删除最后一个+ $equ = rtrim($equ, '+'); // 返回最后想要的算数表达式 return $equ .'='.$sum; } echo demo3(10, 20, 40); echo '<br>'; echo demo3(10, 20, 40, 90, 150); echo '<br>'; // 匿名函数 // 函数的参数可以是一个匿名函数 这个匿名函数就是当前函数的回调参数 // array_map(callback, array)通过回调函数设置的规则对指定数组中的所有元素操作 $arr = range(0,9); $new = array_map(function($par){ return $par % 2 != 0 ? $par : null; }, $arr); $filterArr = array_filter($new, function ($par) { return $par ?:false; }); print_r($new); echo '<br>'; print_r($filterArr); echo '<br>'; // 函数表达式 // 如果一个变量的值是函数,那么这个变量就是函数表达式 // 匿名函数还有一个重要的作用就是当函数表达式的值 $sum = function ($a, $b) { return "{$a} + {$b} =".($a + $b); }; echo $sum(10, 20); echo '<br>'; // 函数表达式最多的用来做函数的回调参数来用 // call_user_func() 和 call_user_func_array()都可以用回调的方式来执行一个函数表达式 echo call_user_func($sum, 10, 90); echo '<br>'; echo call_user_func_array($sum, [10,90]);
运行实例 »
点击 "运行实例" 按钮查看在线实例
作业:
实例
<?php // 初始化变量 $title = '员工信息查询表'; $tableTitle = $title; $total = 5; // 初始化二维数组 $array = [ ['id'=>1, 'name'=>'候亮平', 'age'=>30, 'sex'=>1, 'email'=>'hlp@php.cn', 'password'=>sha1('123456')], ['id'=>2, 'name'=>'赵瑞龙', 'age'=>40, 'sex'=>1, 'email'=>'zrl@php.cn', 'password'=>sha1('123456')], ['id'=>3, 'name'=>'李达康', 'age'=>50, 'sex'=>1, 'email'=>'ldk@php.cn', 'password'=>sha1('123456')], ['id'=>4, 'name'=>'祁同伟', 'age'=>45, 'sex'=>1, 'email'=>'qtw@php.cn', 'password'=>sha1('123456')], ['id'=>5, 'name'=>'高小琴', 'age'=>30, 'sex'=>0, 'email'=>'gxq@php.cn', 'password'=>sha1('123456')], ]; ?> <!--php与html混编--> <!--使用php标签,将php代码直接嵌入到html代码中--> <!--php标签可以写在html文档的任何地方--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title><?php echo $title; ?></title> <style> table,th,td { border: 1px solid #666; padding: 8px; } table { border-collapse: collapse; width: 80%; text-align: center; margin: 30px auto; } thead tr:first-of-type { background-color: lightblue; } tbody tr:hover { background-color: #efefef; } table > caption { font-size: 1.2rem; margin-bottom: 15px; } table + p { text-align: center; } </style> </head> <body> <table> <caption><?='<span style="color:red">'.$tableTitle.'</span>'; ?></caption> <thead> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>邮箱</th> <th>密码</th> </tr> </thead> <tbody> <!-- 用foreach循环遍历二维数组输出 --> <?php // 初始化content $content = ''; foreach ($array as $staff) { $content .= '<tr>'; $content .= '<td>'.$staff['id'].'</td>'; $content .= '<td>'.$staff['name'].'</td>'; $content .= '<td>'.$staff['age'].'</td>'; $content .= "<td>{$staff['sex']}</td>"; $content .= "<td>{$staff['email']}</td>"; $content .= "<td>{$staff['password']}</td>"; $content .= '</tr>'; } echo $content; //// ?> <!-- foreach的简便x写法 --> <!-- --><?php //foreach ($array as $staff) : ?> <!-- <tr>--> <!-- <td>--><?//=$staff['id']?><!--</td>--> <!-- <td>--><?//=$staff['name']?><!--</td>--> <!-- <td>--><?//=$staff['age']?><!--</td>--> <!-- <td>--><?//=$staff['sex']===1 ? '男' : '女'?><!--</td>--> <!-- <td>--><?//=$staff['email']?><!--</td>--> <!-- <td>--><?//=$staff['password']?><!--</td>--> <!-- </tr>--> <!-- --><?php //endforeach; ?> </tbody> </table> <p>总计: <?= $total ?>人</p> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>瑾瑜网络 员工管理系统</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/styles.css" rel="stylesheet"> </head> <body> <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#sidebar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="index.php"><span>瑾瑜</span>网络</a> <ul class="user-menu"> <li class="dropdown pull-right"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-user"></span> User <span class="caret"></span></a> <!--<ul class="dropdown-menu" role="menu">--> <!--<li><a href="#"><span class="glyphicon glyphicon-user"></span> Profile</a></li>--> <!--<li><a href="#"><span class="glyphicon glyphicon-cog"></span> Settings</a></li>--> <!--<li><a href="#"><span class="glyphicon glyphicon-log-out"></span> Logout</a></li>--> <!--</ul>--> </li> </ul> </div> </div><!-- /.container-fluid --> </nav> <div id="sidebar-collapse" class="col-sm-3 col-lg-2 sidebar"> <form role="search"> <div class="form-group"> <input type="text" class="form-control" placeholder="搜索"> </div> </form> <ul class="nav menu"> <li class="active"><a href="staff_list.php" target="workspace"><span class="glyphicon glyphicon-dashboard"></span> 员工管理</a></li> <li><a href="system.php" target="workspace"><span class="glyphicon glyphicon-th"></span> 系统设置</a></li> <li><a href="user_list.php" target="workspace"><span class="glyphicon glyphicon-stats"></span> 用户设置</a></li> </ul> <div class="attribution">版权所有 <a href="#" target="_blank" title="瑾瑜网络">@ 瑾瑜网络</a></div> </div><!--/.sidebar--> <div class="col-sm-9 col-sm-offset-3 col-lg-10 col-lg-offset-2 main"> <iframe src="staff_list.php" name="workspace" class="workspace"></iframe> </div> <!--/.main--> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
总结:
1、流程控制语句是任何编程的重要组成部分,php中重要的是可以同html混编,那么上述的流程控制的替代写法就带来了极大的方便。再手册查阅中 elseif 和else if之间是有区别的,elseif 与 else if 只有在类似上例中使用花括号的情况下才认为是完全相同。如果用冒号来定义 if/elseif 条件,那就不能用两个单词的 else if,否则 PHP 会产生解析错误。
2、函数的参数中可选参数也就是声明的默认参数必须再必选的后面;
3、iframe框架,必须设置name,然后再a的target中相应设置该name