一、PHP函数调用
除了直接调用
函数名(参数);
还可以使用如下两种调用:
call_user_func(‘函数名’,参数)
call_user_func_array(‘函数名’,[数组])即使有一个参数也推荐使用这种。
数组形式的参数列表有三个来源:
1、用户自定义的函数中的参数。
2、对象方法
3、类方法
示例代码:
<?php
$obj = new class(15000){
public float $salary;
public function __construct(float $salary)
{
$this->salary = $salary;
}
};
echo gettype($obj). '<br>';
echo $obj->salary. '<br>';
function f(string $name): string{
return 'hello'. $name;
};
echo f('网络').'<br>';
echo call_user_func('f','电脑').'<br>';
class demo1 {
public function hello(string $name):string{
return 'hello,'.$name;
}
}
$obj = new demo1;
// echo call_user_func([$obj, 'hello'],'类').'<br>';
echo call_user_func_array([$obj, 'hello'],['类da']).'<br>';
class demo2 {
public static function hello(string $name):string{
return 'hello,'.$name;
}
}
echo call_user_func_array(['demo2','hello'],['路人甲']);
二、分支与循环
1. 分支
<?php
namespace _0809;
$salary = 6000;
// 流程控制:分支
// 单分支
echo '------单分支------'.'<br>';
if ($salary <= 6000){
echo "{$salary} 低于全国平均水平!<br>";
echo '<br>';
}
$salary = 7000;
// 双分支
echo '------双分支------'.'<br>';
if($salary <= 6000){
echo $salary.'低于全国平均水平!'.'<br>';
echo '<br>';
}else{
echo $salary.'高于全国平均水平!'.'<br>';
echo '<br>';
}
// 双分支语法糖:三元运算符
echo '------双分支语法糖------'.'<br>';
echo $salary > 6000 ? $salary.'高于全国平均水平!'.'<br>'.'<br>':$salary.'高于全国平均水平!'.'<br>'.'<br>';
$salary = 15000;
// 多分支
echo '------多分支------'.'<br>';
if($salary < 0){
echo $salary.'非法数值'.'<br>';
echo '<br>';
}
elseif($salary <= 6000){
echo $salary.'是全国平均水平!'.'<br>';
echo '<br>';
}elseif($salary > 6000 && $salary <= 20000){
echo $salary.'是全国一般水平!'.'<br>';
echo '<br>';
}elseif($salary > 20000 && $salary <= 50000){
echo $salary.'是全国中高水平!'.'<br>';
echo '<br>';
}else{
echo $salary.'是全国顶尖水平!'.'<br>';
echo '<br>';
}
$salary = 51000;
// 多分支语法糖:switch
echo '------多分支语法糖------'.'<br>';
Switch(true){
case $salary <= 6000:
echo $salary.'是全国平均水平!'.'<br>';
echo '<br>';
break;
case $salary > 6000 && $salary <= 20000:
echo $salary.'是全国平均水平!'.'<br>';
echo '<br>';
break;
case $salary > 20000 && $salary <= 50000:
echo $salary.'是全国中高水平!'.'<br>';
echo '<br>';
break;
default:
echo "{$salary}是全国顶尖水平!<br>";echo '<br>';
}
2. 循环
<?php
namespace _0809;
//for循环
$colors = ['红','黄','蓝'];
echo '数组长度'.count($colors).'<br>';
$list = '<ul style="border: 1px solid red">';
for($i =0; $i < count($colors); $i++){
$list .= "<li>{$colors[$i]}</li>";
}
$list .= '</ul>';
echo $list;
// while循环
$i = 0;
$list = '<ul style="border: 1px solid yellow">';
while($i < count($colors)){
$list .= "<li>{$colors[$i]}</li>";
$i++;
}
$list .= '</ul>';
echo $list;
// do while循环
$i = 0;
$list = '<ul style="border: 1px solid green">';
do {
$list .= "<li>{$colors[$i]}</li>";
$i++;
}while($i < count($colors));
$list .= '</ul>';
echo $list;
三、数组遍历和模板语法
1. 数组遍历
<?php
namespace _0809;
// $colors = ['红','黄','蓝'];
// print_r($colors);
// printf('<pre>%s</pre>',print_r($colors,true));
// 索引数组的完整声明语法
// $colors = ['0'=>'红','1'=>'黄','2'=>'蓝'];
// printf('<pre>%s</pre>',print_r($colors,true));
// // 关联数组,键名是字符串。
// $user = ['id'=>'1','name'=>'大黄','score'=>'90'];
// printf('<pre>%s</pre>',print_r($user,true));
// echo '<hr>';
// // 数组专用遍历foreach
// // foreach($arr as $key=>$value){...}
// foreach($user as $value){
// echo $value.'<br>';
// }
// foreach($user as $key=>$value){
// // echo $key.'=>'.$value.'<br>';
// printf('[%s]=>%s <br>',$key,$value);
// }
// 二维数组
// php用二维数组来表示从数据表中查询到的结果
$users = [
0 => ['id'=>'0','name'=>'大蓝','gender'=>'0','score'=>'91'],
1 => ['id'=>'1','name'=>'大黄','gender'=>'1','score'=>'90']
];
// printf('<pre>%s</pre>', print_r($users,true));
// foreach + table 渲染到页面
$table = '<table border="1px" width="400px" cellspacing="0" cellpadding="3px" align="center">';
$table .= '<caption>用户信息表</caption>';
$table .= '<thead bgcolor="#ccc">
<tr>
<th>编号</th>
<th>用户名</th>
<th>性别</th>
<th>分数</th>
</tr>
</thead>';
$table .= '<tbody align="center">';
foreach($users as $user){
// print_r($user);
$table .= '<tr>';
$table .= "<td>{$user['id']}</td>";
$table .= '<td>'.$user['name'].'</td>';
$table .= '<td>'.($user['gender'] ? '女':'男').'</td>';
$table .= '<td>'.$user['score'].'</td>';
$table .= '</tr>';
}
$table .= '</tbody>';
$table .= '</table>';
echo $table;
2. 模板语法
流程控制的替代语法/模板语法
- foreach -> endforeach
- for -> endfor
- if -> endif
- switch -> endswitch(Switch和第一个case之间不能有空格/换行,否则会报错。)
<?php
namespace _0809;
$stus = [
['id' => 1, 'name' => '刘备', 'course' => 'js', 'score' => 83],
['id' => 2, 'name' => '关羽', 'course' => 'php', 'score' => 75],
['id' => 3, 'name' => '张飞', 'course' => 'js', 'score' => 52],
['id' => 4, 'name' => '孙权', 'course' => 'php', 'score' => 88],
['id' => 5, 'name' => '周瑜', 'course' => 'js', 'score' => 65],
['id' => 6, 'name' => '孔明', 'course' => 'php', 'score' => 53],
['id' => 7, 'name' => '赵云', 'course' => 'js', 'score' => 63],
['id' => 8, 'name' => '马超', 'course' => 'js', 'score' => 77],
['id' => 9, 'name' => '姜维', 'course' => 'php', 'score' => 93],
['id' => 10, 'name' => '黄忠', 'course' => 'js', 'score' => 41],
]
?>
<style>
table {
width: 360px;
text-align: center;
border-collapse: collapse;
}
table caption {
font-size: 1.3em;
}
table thead {
background-color: lightcyan;
}
table th,
table td, {
border:1px solid #000;
padding:5px;
/* text-align: center; */
}
.active {
color: red;
}
</style>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<table>
<caption>学生成绩表</caption>
<thead>
<th>编号</th>
<th>姓名</th>
<th>课程</th>
<th>成绩</th>
</thead>
<tbody>
<!-- 遍历数据表的内容,渲染到页面中。 -->
<?php foreach($stus as $stu): ?>
<tr>
<!-- <td><?=$stu['id'] ?></td>
<td><?=$stu['name'] ?></td>
<td><?=$stu['course'] ?></td>
<td><?=$stu['score']?></td> -->
<!-- <?php if($stu['score'] > 70): ?>
<td><?=$stu['id'] ?></td>
<td><?=$stu['name'] ?></td>
<td><?=$stu['course'] ?></td>
<td><?=$stu['score']?></td>
<?php endif ?> -->
<?php switch(true): ?><?php case $stu['score'] > 70: ?>
<td><?=$stu['id'] ?></td>
<td><?=$stu['name'] ?></td>
<td><?=$stu['course'] ?></td>
<td><?=$stu['score']?></td>
<?php endswitch?>
</tr>
<?php endforeach?>
</tbody>
</table>
</body>
</html>