第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(编程语言) 大厨,真正干活的人

配图1 - 配图1

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 的变量不需要声明类型,它自己会猜

配图2 - 配图2

生活类比:变量就像带标签的收纳盒。你在盒子上贴「袜子」,里面放的就是袜子。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 个核心点

  1. PHP 是「后厨大厨」:专门处理网站后台逻辑的语言,接收请求、处理数据、返回结果
  2. LAMP 架构:Linux + Apache + MySQL + PHP,缺一不可,搞清楚请求流程很重要
  3. PHP 语法很简单:变量用 $,字符串拼接用 .,数组用 array(),分号不能忘

延伸学习资源

  1. 官方文档php.net/manual/zh/ —— 最权威的参考,有中文版
  2. 《PHP 和 MySQL Web 开发》 —— 经典书,但有点厚,适合当字典
  3. 视频教程:B 站搜索「PHP 入门」—— 适合跟着敲

你在学习 PHP 之前,有没有做过其他语言的网页?比如用 Python 的 Django 或 Flask?感觉有什么不同?评论区聊聊,老粉优先回复!


下一章我们要解决一个实际问题:装了这么久系统,到底怎么把 PHP 环境跑起来? 第 1.2 章「PHP 安装与环境配置」,手把手教你在 Windows/Mac 上配置 DedePHPStudy,让你的第一个 PHP 程序跑起来!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。