第1章 1.1 PHP 是什么与 LAMP/WAMP 架构
🎯 开场:为什么你需要一个「网页背后的英雄」?
你有没有想过这个问题:当你打开一个网页,填写表单、登录账号、查看商品详情——这些数据是从哪来的?又是怎么变成你看到的页面的?
举个好理解的例子。你去餐厅吃饭:
- 你(浏览器)走进餐厅,说「我要一份宫保鸡丁」
- 服务员(Apache/Nginx)接单,喊道「后厨,接单!」
- 大厨(PHP)真正动手做菜,从冰箱(MySQL)拿食材
- 菜做好了,服务员端出来给你
PHP 就是这个「后厨大厨」——它接收你的请求,真正处理数据,然后把结果送出来。
你可能遇到的痛点
- 想做一个「留言板」或「小博客」,不知道该怎么让网页「动起来」
- 学了 HTML/CSS 只能做静态页面,一刷新还是老样子
- 想做用户登录、商品展示,但不知道这些数据存在哪、怎么调取
学完这一章,你就能搞清楚:你写的代码是怎么变成你看到的网页的,以及为什么有些网站能「记住」你的用户名,有些却不能。
🧱 基础:你每天都在用的 PHP,其实很简单
什么是 PHP?
PHP 的全称是 "PHP: Hypertext Preprocessor"(递归缩写,不用在意这个名字有多怪)。
说白了,PHP 是一种「在后厨默默干活」的语言——它专门用在网站上,负责处理数据、连接数据库、生成网页内容。
生活类比:PHP 就像餐厅后厨的厨师。它不直接面对客人(那是 HTML/CSS 的活儿),而是在后面接收订单、处理食材、产出成品。
为什么要用 PHP?
- 你访问的绝大多数网站都是 PHP 写的:Facebook(早期)、WordPress、Wikipedia、微博(早期)……
- ** PHP 生态太丰富了**:全球 40% 的网站用的是 WordPress,而 WordPress 就是 PHP 写的
- 入门超简单:5 分钟就能写出第一个「Hello World」
PHP 能做什么?
- 用户注册、登录
- 论坛、博客、商城
- 数据存取(从数据库读写)
- 处理表单提交
- 生成动态网页
LAMP/WAMP 架构——你运行的「餐厅」长什么样?
这是本章最核心的概念,搞清楚这个,后面学什么都顺。
LAMP 是 4 个东西的首字母组合:
| 字母 | 代表什么 | 餐厅类比 |
|---|---|---|
| L | Linux(操作系统) | 餐厅所在的整栋大楼 |
| A | Apache(网页服务器) | 服务员,负责接单和送单 |
| M | MySQL(数据库) | 冰箱,存着所有食材 |
| P | PHP(编程语言) | 大厨,真正干活的人 |

WAMP 就是把 Linux 换成 Windows——在 Windows 电脑上跑同样的架构。
注意! 实际生产环境中,Apache 经常被 Nginx 替代,PHP 也经常以 PHP-FPM 的方式运行。但对新手来说,先理解 LAMP 就够了。
请求流程:一次访问是怎么完成的?
你(浏览器) → 输入网址 → Apache(Nginx)收到请求
↓
「这是个 .php 文件」
↓
PHP 引擎启动,读取文件
↓
PHP 执行代码,可能从 MySQL 拿数据
↓
PHP 生成 HTML 返回
↓
浏览器显示页面
举个例子:你去微博看一条热搜
1. 你在浏览器输入 weibo.com
2. Apache 收到请求,发现是个 .php 文件
3. PHP 读取你的账号信息、热搜数据
4. PHP 生成 HTML:「欢迎回来,这是今天的热搜……」
5. 浏览器显示给你看
你的第一个 PHP 程序
终于到代码环节了!
在 DedePHPStudy 环境下(下一章会教你怎么装),找个地方新建一个文件,叫 hello.php:
<?php
// 这是我的第一个 PHP 程序
echo "Hello,PHP!你好,世界!";
?>
保存后,在浏览器访问 http://localhost/hello.php,你会看到:
Hello,PHP!你好,世界!
这行在干嘛?
- <?php 和 ?> 是 PHP 代码的「起止标记」,告诉服务器「这里面是 PHP 代码」
- echo 是「输出」的意思,相当于 Python 的 print
说白了:就像打开电视需要按电源键,
<?php就是 PHP 代码的「电源键」。
PHP 变量——数据的「收纳盒」
<?php
$名字 = "小明";
$年龄 = 18;
$是学生 = true;
echo "你好,我叫" . $名字 . ",今年" . $年龄 . "岁";
?>
输出:
你好,我叫小明,今年18岁
这行在干嘛?
- $名字、$年龄 就是变量,用 $ 开头
- . 是拼接字符串的符号(相当于 Python 的 +)
- PHP 的变量不需要声明类型,它自己会猜

生活类比:变量就像带标签的收纳盒。你在盒子上贴「袜子」,里面放的就是袜子。PHP 里,你写
$袜子 = "运动款",这个盒子里就存了「运动款」。
PHP 基本语法:几分钟就学会
PHP 的语法规则特别少,有编程基础的同学 5 分钟就能上手:
<?php
// ============ 条件判断 ============
$天气 = "晴天";
if ($天气 == "晴天") {
echo "出门记得戴墨镜!";
} else {
echo "带上伞吧!";
}
// ============ 循环 ============
for ($i = 1; $i <= 3; $i++) {
echo "第" . $i . "次循环<br>";
}
// ============ 数组(列表) ============
$水果列表 = array("苹果", "香蕉", "橙子");
foreach ($水果列表 as $水果) {
echo "我喜欢吃" . $水果 . "<br>";
}
?>
输出:
出门记得戴墨镜!
第1次循环<br>第2次循环<br>第3次循环<br>我喜欢吃苹果<br>我喜欢吃香蕉<br>我喜欢吃橙子<br>
这行在干嘛?
- if/else 跟其他语言一样,写法上括号可省
- for 循环:$i++ 就是 $i = $i + 1
- array() 创建数组,等价于 Python 的 []
- foreach 遍历数组,类似 Python 的 for x in list:
注意! PHP 语句以分号
;结尾,忘了写会报错!这是新手最容易踩的坑。
🔥 实战:3 个小项目,从「看懂」到「能用」
项目 1:5 分钟——「小明的购物清单」(基础版)
场景:小明想买几样东西,用 PHP 打印出购物清单。
<?php
// 小明的购物清单
$购物车 = array(
"可口可乐" => 3,
"薯片" => 2,
"面包" => 1
);
echo "=== 小明的购物清单 ===<br>";
$总数 = 0;
foreach ($购物车 as $商品 => $数量) {
echo $商品 . " x " . $数量 . "<br>";
$总数 += $数量;
}
echo "---------------------<br>";
echo "共 " . $总数 . " 件商品";
?>
预期输出:
=== 小明的购物清单 ===
可口可乐 x 3
薯片 x 2
面包 x 1
---------------------
共 6 件商品
一句话解释:用关联数组(键值对)存商品和数量,遍历输出。
项目 2:15 分钟——「班级成绩统计」(从 JSON 读数据)
场景:班主任有一个 scores.json 文件,存着全班同学的成绩,用 PHP 统计最高分、平均分。
首先,创建 scores.json:
[
{"姓名": "张三", "数学": 92, "语文": 88},
{"姓名": "李四", "数学": 78, "语文": 95},
{"姓名": "王五", "数学": 85, "语文": 82}
]
然后,创建 stats.php:
<?php
// 读取 JSON 数据
$json数据 = file_get_contents("scores.json");
$学生列表 = json_decode($json数据, true); // true 表示转为数组
$最高分 = 0;
$总分 = 0;
$人数 = count($学生列表);
echo "=== 班级成绩统计 ===<br><br>";
// 遍历计算
foreach ($学生列表 as $学生) {
$平均分 = ($学生["数学"] + $学生["语文"]) / 2;
echo $学生["姓名"] . " - 平均分: " . $平均分 . "<br>";
// 找最高分(这里简化处理,只看总分)
$学生总分 = $学生["数学"] + $学生["语文"];
if ($学生总分 > $最高分) {
$最高分 = $学生总分;
}
$总分 += $学生总分;
}
echo "<br>班级平均分: " . ($总分 / $人数 / 2) . "<br>";
echo "最高总分: " . $最高分;
?>
预期输出:
=== 班级成绩统计 ===
张三 - 平均分: 90
李四 - 平均分: 86.5
王五 - 平均分: 83.5
班级平均分: 86.5
最高总分: 187
一句话解释:json_decode() 把 JSON 字符串变成 PHP 数组,然后遍历计算统计值。
项目 3:15 分钟——「待办事项小工具」(综合实战)
场景:做一个简易的待办清单工具,能添加任务、显示任务列表、标记完成。
<?php
// 待办清单小工具
$待办文件 = "todos.txt";
// 处理添加任务
if (isset($_POST["新任务"])) {
$任务 = $_POST["新任务"] . " | 未完成\n";
file_put_contents($待办文件, $任务, FILE_APPEND);
}
// 处理标记完成
if (isset($_GET["完成"])) {
$所有任务 = file($待办文件);
$所有任务[$_GET["完成"]] = str_replace("未完成", "已完成", $所有任务[$_GET["完成"]]);
file_put_contents($待办文件, implode("", $所有任务));
}
// 显示所有任务
echo "=== 我的待办清单 ===<br><br>";
if (file_exists($待办文件)) {
$任务列表 = file($待办文件);
foreach ($任务列表 as $序号 => $任务) {
$状态 = strpos($任务, "已完成") ? "✅" : "⬜";
echo $状态 . " [" . $序号 . "] " . $任务 . "<br>";
}
} else {
echo "暂无任务,添加一个吧!<br>";
}
?>
<br>
<form method="POST">
<input type="text" name="新任务" placeholder="输入新任务...">
<button type="submit">添加</button>
</form>
预期输出:
=== 我的待办清单 ===
⬜ [0] 买牛奶 | 未完成
✅ [1] 写作业 | 已完成
⬜ [2] 打电话给妈妈 | 未完成
<br>
[添加任务的表单]
一句话解释:用 file_put_contents() 写文件,file() 读文件,用 URL 参数 ?完成=1 来标记任务完成。
💪 进阶:3 个坑 + 1 个技巧
❌ 坑 1:忘了分号
// ❌ 错误写法
echo "Hello"
// ✅ 正确写法
echo "Hello";
原因:PHP 每一句必须以分号结尾,少了就会报 Parse error。
❌ 坑 2:变量名写错
// ❌ 错误写法
$用户名 = "小明";
echo $名字; // 变量名不一致
// ✅ 正确写法
$用户名 = "小明";
echo $用户名;
原因:PHP 不会报错,只是输出空值。这种 bug 最难找!
❌ 坑 3:字符串拼接用错符号
// ❌ 错误写法
echo "我叫 $用户名,是学生" // 复杂表达式会出问题
// ✅ 正确写法(用点号拼接)
echo "我叫 " . $用户名 . ",是学生";
❌ 坑 4:数组越界不报错
// ❌ 错误写法
$水果 = array("苹果", "香蕉");
echo $水果[5]; // 不会报错,返回 NULL 或空
// ✅ 正确写法(先检查)
if (isset($水果[5])) {
echo $水果[5];
}
💡 调试技巧:echo 大法
<?php
// 调试时在关键位置打印变量
$用户输入 = $_POST["data"];
echo "DEBUG: 用户输入是:" . $用户输入 . "<br>";
echo "DEBUG: 类型是:" . gettype($用户输入) . "<br>";
// 复杂数组用 print_r 打印
print_r($复杂数组);
?>
说白了:写代码遇到奇怪的问题,先加
echo打印变量值,80% 的 bug 都能自己找出来。
✏️ 练习题
练习 1(2 分钟):变量替换
- 输入:把项目 1 中的「可口可乐」改成「雪碧」
- 预期输出:显示「雪碧 x 3」
- 提示:直接在数组里改那个字符串
练习 2(3 分钟):加个判断
- 输入:在项目 1 中,如果购物数量 > 3,显示「买太多了!」
- 预期输出:在总数下面多一行「买太多了!」
- 提示:在
echo "共 " . $总数 . " 件商品";后面加 if 判断
练习 3(5 分钟):新数据统计
- 输入:新建一个
grades.json,包含 4 个学生的成绩 - 预期输出:用项目 2 的方法统计平均分和最高分
- 提示:记得 JSON 格式要正确,中文要用引号
练习 4(10 分钟):两个项目串起来
- 输入:用项目 2 读取的数据,把结果也保存到文件里
- 预期输出:既有屏幕输出,又在文件里存一份
- 提示:用
file_put_contents()把统计结果写入新文件
练习 5(5 分钟):看懂报错
- 输入:以下代码有什么问题?
<?php
$数字 = 100
echo $数字
?>
- 预期输出:指出错误并修复
- 提示:数一数有几处分号没写
📝 作业:做一个「个人简历生成器」
需求描述:做一个 PHP 小工具,输入姓名、年龄、职业、特长,生成一份漂亮的简历文本。
功能点:
1. 用表单接收用户输入
2. 用变量存储输入内容
3. 生成格式化的简历文本并显示
4. 把简历保存到文件(用日期命名)
加分项:
1. 加一个「求职意向」字段
2. 支持头像图片路径输入
验收标准:
- 能跑起来
- 表单提交后显示完整简历
- resume_2024-01-01.txt 这样的文件被创建
📚 总结 + 资源
本章 3 个核心点
- PHP 是「后厨大厨」:专门处理网站后台逻辑的语言,接收请求、处理数据、返回结果
- LAMP 架构:Linux + Apache + MySQL + PHP,缺一不可,搞清楚请求流程很重要
- PHP 语法很简单:变量用
$,字符串拼接用.,数组用array(),分号不能忘
延伸学习资源
- 官方文档:php.net/manual/zh/ —— 最权威的参考,有中文版
- 《PHP 和 MySQL Web 开发》 —— 经典书,但有点厚,适合当字典
- 视频教程:B 站搜索「PHP 入门」—— 适合跟着敲
你在学习 PHP 之前,有没有做过其他语言的网页?比如用 Python 的 Django 或 Flask?感觉有什么不同?评论区聊聊,老粉优先回复!
下一章我们要解决一个实际问题:装了这么久系统,到底怎么把 PHP 环境跑起来? 第 1.2 章「PHP 安装与环境配置」,手把手教你在 Windows/Mac 上配置 DedePHPStudy,让你的第一个 PHP 程序跑起来!

评论(0)