PHP基础入门(二)
PHP基础入门(二)
[!NOTE]
本篇文章仅用于个人交流与学习,如涉及侵权请联系站长删除!
这篇文章用来理解PHP流程控制语句、函数和数组!
1. 流程控制语句
流程控制语句用来控制程序的执行流程,分为三种流程结构:
顺序结构、选择结构和循环结构。
1.1 顺序结构
当没有任何有关流程控制的语句时,程序默认的执行顺序,从上而下,一行一行执行。
1.2 选择结构
程序在自上而下依次执行时,可以通过条件判断,选择性的执行某一段代码。若条件P为真,则执行A,否则执行B 。
1.2.1 if
语句
1 | if(condition1){ |
- 解释:上面的代码若
condition1
条件为真,则执行code1
部分的代码;若condition1
不为真但condition2
为真,则执行code2
部分的代码,若两者都不为真,则执行code3
部分的代码。
1.2.2 switch
语句
1 | switch($var){ |
- 解释:
$var
是要判断的变量或表达式,程序会将其值与后续的case
值进行比较;case value1:
表示一个匹配项:当$var == value1
(松散比较)时,可以有任何数量个case
分支,支持不同类型:数字、字符串、常量等。// code
对应匹配成功后执行的代码块,可以包含任意有效的 PHP 代码。break;
关键中断指令:执行完当前 case 后跳出整个 switch 结构,如果省略,程序会继续执行下一个 case 的代码(称为”case 穿透”)。default:
当$var
不匹配任何 case 时执行的默认分支,可以省略,但建议始终包含以处理意外情况,通常放在最后(非强制要求)。
1.3 循环语句
循环语句功能:在循环条件满足的情况下,反复执行特定代码。
1.3.1 while
循环
语法:
1 | while (condition) { |
特点:
- 先判断条件后执行
- 条件为真时执行代码块
- 条件为假时跳过整个循环
工作流程:
1 | 开始 |
示例:
1 | $counter = 1; |
1.3.2 do-while
循环
语法:
1 | do { |
特点:
- 先执行一次代码块,再检查条件
- 条件为真时继续执行
- 至少执行一次代码块
- 结尾的分号(
;
)不能省略
工作流程:
1 | 开始 |
示例:
1 | $i = 5; |
1.3.3 for
循环
语法:
1 | for (init; condition; increment) { |
组成部分:
- 初始化表达式 (
init
):循环开始时执行一次 - 循环条件 (
condition
):每次迭代前检查 - 递增/递减表达式 (
increment
):每次迭代后执行
工作流程:
1 | 开始 |
示例:
1 | for ($i = 0; $i < 3; $i++) { |
高级用法:
1 | // 多表达式 |
1.3.4 foreach
循环
语法:
1 | foreach ($array as $value) { |
特点:
- 专门遍历数组和对象
- 自动迭代数组中的每个元素
- 不需要维护计数器
工作流程:
1 | 开始 |
示例:
1 | $colors = ["red", "green", "blue"]; |
高级特性:
1 | // 引用遍历(修改原数组) |
适用场景:
- 遍历数组元素
- 处理关联数组
- 操作多维数组
1.4 循环控制语句
1.4.1 break
语句
立即结束整个循环。
break n
可以指定跳出多少层循环。1
2
3
4
5
6
7for ($i = 0; $i < 10; $i++) {
if ($i == 5) {
break; // 跳出循环
}
echo $i;
}
// 输出:01234
1.4.2 continue
语句
跳过当前迭代,进入下一次循环。
continue n
可以指定跳过多少层迭代。1
2
3
4
5
6
7for ($i = 0; $i < 5; $i++) {
if ($i == 2) {
continue; // 跳过本次迭代
}
echo $i;
}
// 输出:0134
1.4.3 循环标签
顾名思义循环标签就是给某一个循环赋予可自定义的名字,一是为了让程序更加清晰,二是为了跳出循环时可以比break n
更加灵活,直观的操作。
1 | outerLoop: // 给外层循环贴标签 |
循环标签 vs break n
特性 | 循环标签 | break n |
---|---|---|
可读性 | 更好(名称有意义) | 需数层级 |
灵活性 | 可在不同作用域使用 | 只限连续嵌套 |
可靠性 | 修改结构不影响 | 层级改变需调整n值 |
使用场景 | 复杂多层且需精确控制 | 简单嵌套跳多层 |
2. 函数
2.1 函数定义
1 | function 函数名(参数1, 参数2 = "默认值"): 返回值类型 |
关键特性:
默认参数:可选参数必须放在必选参数之后
function calc($a, $b=10) {...}
。类型声明(PHP7+增强):
1
2
3function add(int $a, float $b): string {
return strval($a + $b);
}无返回值时:可省略
return
或使用return null
。
2.2 函数调用
1 | $result = function(参数1, 参数2); |
- 传参方式:
- 值传递(默认):修改形参不影响实参
- 引用传递:
function foo(&$var) {...}
(在函数定义时参数前加&
(如function foo(&$param)
)。这种方式传递的是实参变量本身的内存地址,而不是值的拷贝。函数内部修改$param
会直接影响调用处原始的$arg
变量。图片中展示的是更常用的值传递。)
- 返回值处理:
函数执行后返回给调用者的数据叫做返回值,可以用来传递数据。
1 |
|
2.3 匿名函数
1 | // 步骤1:创建匿名函数并赋值给变量 |
- 匿名函数核心解析
- 匿名:
- 普通函数:
function sayHello() {...}。
- 匿名函数:
function(...){...}
(没有函数名)。
- 普通函数:
- 赋值给变量才能使用:
$greet = function(...){...};
- 通过
$greet
变量来“保存”这个函数。
- 调用方式 = 变量名+括号:
$greet("参数")
👉 像普通函数一样调用。
- 参数传递:
$name
接收传入的值(本例中接收"World"
)。
- 函数返回值:
return "Hello $name"
返回拼接后的字符串。
- 匿名:
3. 数组
数组指数据的组合,能够在单个变量中存储多个值。可以将数组看作一个存储数据的盒子,盒子中有很多个格子,每个格子中都可存储一个数据。
- 数组名:盒子名
- 元素:格子中的数据
- 索引:格子的位置
- 长度:格子的数量
3.1 索引数组
通过索引读取数组中的元素 :$数组名[索引];
,索引从0开始。即数组中的第一个元素索引为0,以此类推。
1 |
|
3.2 关联数组
3.2.1 核心概念:
- 键值对:关联数组中的每个元素都由两个部分组成——键(key)和值(value)
- 自定义键名:与索引数组使用从 0 开始的数字作为键(索引)不同,关联数组允许你使用字符串作为键名(也可以使用整数,但意义通常是自定义的)。这个键名是描述性的,代表了你要存储的值的含义。
- 映射关系:你可以把关联数组想象成一个词典或一张映射表。通过一个唯一的、有意义的键,你可以快速查找、访问或修改与之关联的值。
3.2.2 关联数组
创建关联数组
1
2
3
4
5
6
7
8
9
10
11
12
13// 使用 array() 语法(较旧但仍然有效)
$student = array(
"name" => "张三",
"age" => 20,
"major" => "计算机科学"
);
// 使用更简洁的 [] 语法(PHP 5.4+ 推荐)
$car = [
"make" => "Toyota",
"model" => "Camry",
"year" => 2023
];访问元素
1
2echo $student["name"]; // 输出:张三
echo $car["model"]; // 输出:Camry添加或修改元素
1
2$student["grade"] = "B+"; // 添加新元素
$student["age"] = 21; // 修改现有元素注意:
- 键是唯一的,同一个数组中,不能有两个元素使用完全相同的键名。如果指定相同的键名,后面的值会覆盖前面的值。
- 键的类型可以是 整数 或 字符串,如果一个字符串键的内容恰好是一个有效的十进制整数(如
'123'
),PHP 会自动将其转换为整数键(123
)。 - 值的类型可以是PHP支持的任何类型。