赋值
1.值传递
// 赋值
$a=3;
// 更新
$b=$a;
2.引用传递
在变量前 加 & 表示引用
使用引用传递,在值改变时,会同步更新原始变量的值
在引用传递时,并不是创建了一个新变量,而是通过引用的方式,用一个别名将原始变量引用,所以当值改变时,原始变量的值也会改变
// 赋值
$a=3;
// 引用传递
$b=&$a;
$b=5;
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,在参数列表中直接将第一个函数和所需要的参数传入
function hallo($gongzi){
return $gongzi;
};
echo call_user_func('hallo', 1000);
call_user_func_array(调用的函数,参数列表) 这个调用中参数列表支持数组传入(尽量使用这个,特殊情况用第一个)
就比如下方定义了一个函数hallo ,在下方有一个数组, 在我们调用call_user_func_array 时,直接将所需要的第二个参数列表,以数组c的形式传入
function hallo($gongzi,$renshu){
return $gongzi+$renshu;
}
$c=[1000,2000];
echo call_user_func_array('hallo',$c);
如果这个函数来自对象方法
注释:这里创建了一个类,里面有一个方法hallo
在下方new了一个实例对象obj
我们在调用时,将对象名和对象中的方法名放在第一个参数中,以数组的方式,将参数列表放在第二个参数中
class Product
{
public function hallo($gong,$ren){
return $gong+$ren;
}
}
$obj=new Product();
echo call_user_func_array([$obj,'hallo'],$c);
如果这个函数来自类方法
类方法调用,直接调用类名,不用调用对象名
class Product
{
public static function hallo($gong,$ren){
return $gong+$ren;
}
}
echo call_user_func_array(['Product','hallo'],$c);
流程控制
分支
和JS一样,分支也分为单分支双分支和多分支
单分支
$age = 15;
if ($age >18){
echo '可以看,还可以充钱开会员看';
};
双分支
$age = 15;
if ($age >18){
echo '可以看,还可以充钱开会员看';
}else{
echo '可以偷偷看';
};
双分支三元运算符(语法糖)
$age = 15;
echo $age>18?'可以看,还可以开会员看':'可以偷偷看';
多分支
直接写语法糖了,反正原始的写法也用不着
多分支的语法糖是 switch(true){
case 允许条件
满足条件后运行的方法
break;
……(重复上面的语法)
default: 默认执行的方法
};
最后的default 是默认执行,就是在所有条件都不满足时,执行这个方法
switch
$age = 13;
switch (true) {
case $age >= 18 && $age < 30:
echo "{$age}岁,彩礼,能按揭吗?<br>";
break;
case $age >= 30 && $age < 45:
echo "{$age}岁,应该成个家了<br>";
break;
default:
echo "{$age}岁,放学,我送你回家<br>";
}
循环
循环的本质,也是分支
循环的三个条件:1.初始化循环条件 2.循环条件 3.更新循环条件(不更新就会死循环)
// 循环目标
$a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
// count 可以获取当前数组的长度
$c=count($a);
// 初始化循环条件
$i=0;
while ($i<$c) {
echo $a[$i];
$i++;
};
循环语法糖
for(初始化循环,循环条件,更新){执行方法};
for($i=0;$i<$c;$i++) {
echo $a[$i];
};
continue 跳过某次循环,进入下一次循环(使用if来判断,满足条件就跳过)
break 提前结束循环 (也是使用if来判断,满足条件就直接停止循环)
数组遍历
数组类型
1.索引数组 :健名是数值,从0开始递增的正整数
2.关联数组 :健名是字符串
$user=['name'=>'John', 'email'=>'john@example.com'];
printf('<pre>%s</pre>', print_r($user,true));
数组遍历
forEach(数组名 as 健名=>对应的值){对象方法}
$user=['name'=>'John', 'email'=>'john@example.com']
foreach($user as $key=>$value) {
echo $value."\n";
}
二维数组
可以理解为一个大数组里面包含了多个小数组
$user =[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]];
可以使用foreach+table 的方法以表格的方式将二维数组渲染到页面
PhP中“.=”表示赋值运算符,是字符串连接的意思,该运算符的使用语法如“$string .= string2;”,可以实现字符串拼接效果。
$d='我是';
$d .= '小学生';
echo $d;
运行结果就是第一个字符串拼接第二个字符串
使用模板语法 写一个学生信息管理系统
html和php混编
这里用二维数组模拟从数据库接收的结果
<?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],
]
?>
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调用的数据
<!DOCTYPE html>
<html lang="zh-CN">
<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>学生信息管理系统</title>
<style>
table {
border-collapse: collapse;
width: 360px;
text-align: center;
}
table th,
table td {
border: 1px solid #000;
padding: 5px;
}
table caption {
font-size: 1.3em;
}
table thead {
background-color: lightcyan;
}
.active {
color: red;
}
</style>
</head>
<body>
<!-- 表格 -->
<table>
<!-- 表名 -->
<caption>学生成绩表</caption>
<!-- 头部 -->
<thead>
<tr>
<th>学号</th>
<th>姓名</th>
<th>课程</th>
<th>成绩</th>
</tr>
</thead>
<!-- 表格内容 -->
<tbody>
<?php
// 遍历数据表的内容,并渲染到页面中
// { => :
// } => endforeach, endfor, ...
foreach ($stus as $stu) : ?>
<tr>
<?php if ($stu['score'] >= 70) : ?>
<td><?=$stu['id']?>
</td>
<td><?=$stu['name']?>
</td>
<td><?=$stu['course']?>
</td>
<td><?=$stu['score']?>
</td>
<?php endif ?>
</tr>
<?php endforeach ?>
<?php
/**
*
* 流程控制的替代语法/模板语法
* 1. foreach - endforeach
* 2. for -> endfor
* 3. if -> endif
* 4. switch -> endswitch
*/
?>
</tbody>
</table>
</body>
</html>