一、你已经在 Web 开发这条路上走了很远
如果你已经跟完了《前端圭臬》《后端零基础入门》《Python 零基础入门》《C/C++ 零基础入门》这四个系列,你现在手里至少有三把刷子:
- 前端:HTML、CSS、JavaScript 写页面,操作 DOM,处理用户交互。
- Node.js 后端:Express 框架、MySQL 数据库、JWT 认证、RESTful API。
- Python:爬虫、数据分析、自动化脚本、Flask 后端。
- C 语言:指针、内存管理、文件操作、底层思维。
现在学 PHP,不是从零开始学编程,而是用你已经掌握的编程思维,去掌握一门专门为 Web 开发设计的语言。你会发现在 PHP 中做 Web 开发,很多事情比 Node.js 和 Python 更直接——因为 PHP 从诞生第一天起,就只做一件事:处理 HTTP 请求并返回 HTML 页面。
二、PHP 是什么
PHP 的全称是 PHP: Hypertext Preprocessor(超文本预处理器)。这个缩写本身就是一个递归缩写——PHP 中的 P 又代表 PHP,这是程序员式的幽默。
PHP 是一门解释型、动态类型、专门为 Web 开发设计的服务器端脚本语言。它诞生于 1994 年,比 JavaScript 还早一年,比 Python 晚三年。和 JavaScript/Python 一样,变量不需要声明类型,代码不需要编译,写完就能跑。
PHP 最大的特点,是它可以直接嵌入到 HTML 中:
<!DOCTYPE html>
<html>
<head>
<title>我的第一个 PHP 页面</title>
</head>
<body>
<h1>欢迎来到我的网站</h1>
<p>今天的日期是:<?php echo date('Y年m月d日'); ?></p>
</body>
</html>
看到 <?php ... ?> 这个标记了吗?这就是 PHP 代码的”开关”。在这个标记之内的代码会被 PHP 引擎执行,之外的内容原样输出。这和 JavaScript 完全不同——JS 需要通过 DOM 操作来修改页面内容,PHP 直接在 HTML 生成时就把动态内容插入进去了。
这种”嵌入式”的设计,让 PHP 在 Web 开发中有着无与伦比的便利性。不需要模板引擎、不需要前端框架,一个 .php 文件就能同时包含 HTML 结构和服务器端逻辑。
三、PHP 和 JavaScript/Python 的核心区别
3.1 运行方式:服务器端渲染 vs 客户端渲染
PHP 是纯粹的服务器端语言,代码在服务器上执行,执行完毕后生成 HTML 发送给浏览器。浏览器收到的已经是处理好的 HTML,看不到任何 PHP 代码。
而你在前面学的 JavaScript,既可以在浏览器里跑(操作 DOM),也可以在服务器上跑(Node.js)。Python 也是通用的,能做 Web 后端(Flask/Django),也能做爬虫、数据分析、自动化。
PHP 的专注恰恰是它的优势——在 Web 开发领域,PHP 的便捷性是其他语言难以比拟的。
3.2 部署方式:简单到”令人发指”
Node.js 部署需要:安装 Node.js → 安装依赖 → 配置反向代理(Nginx)→ 用 PM2 管理进程。
Python 部署需要:创建虚拟环境 → 安装依赖 → 配置 WSGI 服务器(Gunicorn/uWSGI)→ 配置反向代理。
PHP 部署只需要:把 .php 文件放到 Apache 或 Nginx 的网站目录下。访问这个文件,它就跑起来了。没有进程管理、不需要手动启动服务、修改代码后刷新页面立即生效。
这种极简的部署方式,是 PHP 在共享主机时代称霸 Web 开发的重要原因。今天全球仍然有超过 75% 的网站使用 PHP(包括 WordPress、Facebook 早期版本、维基百科)。
3.3 语法风格:C 语言的直系后代
如果你刚学完 C 语言,你会发现 PHP 的语法非常亲切:
| 特性 | C | PHP | JavaScript | Python |
|---|---|---|---|---|
| 变量声明 | int x = 10; |
$x = 10; |
let x = 10; |
x = 10 |
| 语句结尾 | 必须分号 | 必须分号 | 分号可选 | 不需要 |
| 代码块 | { } |
{ } |
{ } |
缩进 |
| 数组语法 | int arr[5]; |
$arr = [1, 2, 3]; |
let arr = [1, 2, 3]; |
arr = [1, 2, 3] |
| 函数定义 | int add(int a, int b) |
function add($a, $b) |
function add(a, b) |
def add(a, b): |
PHP 从 C 语言继承了很多语法习惯——分号结尾、花括号代码块、function 关键字、for/while/if 的写法——几乎一模一样。如果你刚学完 C,看到 PHP 的代码会有一种”回家了”的感觉。
但 PHP 比 C 方便得多:没有指针(底层有,但开发者不需要操作)、字符串是内置类型、数组可以动态扩容、内存自动管理。它取 C 语言语法之长,避 C 语言底层之短。
3.4 类型系统:动态但灵活
PHP 是动态类型语言,变量不需要声明类型:
$x = 10; // 整数
$x = "hello"; // 现在变成字符串了——和 JS/Python 一样灵活
PHP 还支持类型转换和类型声明(较新版本):
// 类型转换(和 C 语言一样的写法)
$result = (int)"42"; // 字符串 "42" 转成整数 42
// 现代 PHP 支持类型声明(可选)
function add(int $a, int $b): int {
return $a + $b;
}
四、PHP 能做什么
PHP 的应用场景非常集中——一切和 Web 后端相关的需求:
- 动态网站:WordPress(全球 43% 的网站用它搭建)就是用 PHP 写的。你可以在 WordPress 里直接写 PHP 代码来定制功能。
- Web 应用后端:用户注册登录、表单提交处理、内容管理系统(CMS)、电商网站。
- API 服务:用 PHP 提供 RESTful API,前端(不管是用什么技术栈)通过 HTTP 请求调用。
- 命令行脚本:PHP 也可以脱离浏览器在终端里运行,用来写数据处理脚本、定时任务。
如果你已经会 Node.js 和 Python 写后端,再学 PHP 的意义在于:多了一门专门为 Web 优化的后端语言,而且部署极简。你可以在十分钟内把一个 PHP 网站部署到任何支持 PHP 的廉价虚拟主机上——这种效率是 Node.js 和 Python 做不到的。
五、安装 PHP 开发环境
PHP 需要一个Web 服务器(通常是 Apache 或 Nginx)来运行。但安装 Apache + PHP + MySQL 一套环境有些复杂。对于学习来说,最简单的方式是使用PHP 内置的开发服务器——它从 PHP 5.4 开始就自带了。
5.1 安装 PHP
Windows:
- 打开浏览器,访问
https://windows.php.net/download/。 - 下载最新的 Thread Safe 版本的 ZIP 包。
- 解压到一个文件夹,比如
C:\php。 - 把这个文件夹添加到系统环境变量 PATH 中:右键”此电脑” → 属性 → 高级系统设置 → 环境变量 → Path → 编辑 → 新建 → 填入
C:\php。
Mac:
Mac 自带 PHP,但版本可能较旧。推荐用 Homebrew 安装新版:
brew install php
Linux(Ubuntu/Debian):
sudo apt update
sudo apt install php php-cli
5.2 验证安装
打开终端,输入:
php -v
如果出现类似 PHP 8.3.0 的版本号,说明安装成功。
5.3 启动 PHP 内置开发服务器
在终端中进入你的项目文件夹,执行:
php -S localhost:8080
这行命令启动了一个 PHP 内置的 Web 服务器,监听在 8080 端口。现在打开浏览器,访问 http://localhost:8080,服务器会尝试返回当前文件夹下的 index.php 文件(如果存在的话)。
这个内置服务器是学习阶段的利器。不需要安装 Apache 或 Nginx,不需要配置虚拟主机,一条命令就搞定。不过它只适用于开发学习,生产环境需要用 Apache 或 Nginx。
六、你的第一个 PHP 程序
现在我们来写第一个 PHP 程序。在项目文件夹中创建 index.php:
<?php
// 这是你的第一个 PHP 程序
// 1. 输出一段文字
echo "你好,欢迎来到 PHP 的世界!";
// 2. 变量
$name = "张三";
$age = 28;
echo "我叫{$name},今年{$age}岁。";
// 3. 数组
$fruits = ["苹果", "香蕉", "橘子"];
echo "我喜欢的水果有:" . implode("、", $fruits);
// 4. 条件判断
$score = 85;
if ($score >= 90) {
echo "等级:优秀";
} elseif ($score >= 80) {
echo "等级:良好";
} elseif ($score >= 60) {
echo "等级:及格";
} else {
echo "等级:不及格";
}
// 5. 循环
echo "1 到 5 的循环:";
for ($i = 1; $i <= 5; $i++) {
echo $i . " ";
}
?>
保存文件。确保终端中已经启动了 PHP 内置服务器(php -S localhost:8080),然后在浏览器中访问 http://localhost:8080。
你会看到类似这样的输出:
你好,欢迎来到 PHP 的世界!我叫张三,今年28岁。我喜欢的水果有:苹果、香蕉、橘子。等级:良好。1 到 5 的循环:1 2 3 4 5
恭喜!你已经写出了第一个 PHP 程序。
七、逐行解释这段代码
现在我们来逐行理解这段代码。如果你之前学过 C 语言,你会发现很多语法一模一样。
<?php ... ?>
这是 PHP 代码的起止标记。所有 PHP 代码必须写在 <?php 和 ?> 之间。在这之外的任何内容(HTML、纯文本)都会被原样输出给浏览器。
如果一个文件全部是 PHP 代码(没有嵌入 HTML),惯例是只写开始标记 <?php,不写结束标记 ?>。这可以防止文件末尾多余的空白字符被意外输出。
注释
// 这是单行注释
# 这也是单行注释(和 Shell 风格一样)
/* 这是多行注释
可以跨越多行 */
PHP 支持三种注释风格:// 和 # 都是单行注释,/* */ 是多行注释。这和 C 语言、JavaScript 完全一样。
echo:输出内容
echo "你好,欢迎来到 PHP 的世界!";
echo 是 PHP 中最常用的输出语句。它把后面的内容输出到浏览器。和 C 语言的 printf、Python 的 print()、JavaScript 的 console.log() 功能相同。
注意末尾的分号:PHP 中每条语句必须以分号结尾。这和 C 语言一样,和 JavaScript(分号可选)、Python(不需要分号)不同。
还有一个 print 语句,功能和 echo 几乎相同,但 echo 更常用。
变量:以 $ 开头
$name = "张三";
$age = 28;
PHP 中所有变量都以 $ 符号开头。这是 PHP 和 C/JS/Python 在视觉上最明显的区别。$name 读作”变量 name”。$ 符号是 PHP 变量名的固定前缀。
变量不需要声明类型,和 JS/Python 一样是动态类型。命名规则:$ 后面跟字母或下划线,不能以数字开头。推荐用驼峰命名法:$userName、$studentScore。
字符串中的变量插值
echo "我叫{$name},今年{$age}岁。";
PHP 的双引号字符串支持变量插值——直接在字符串中嵌入变量名,变量值会被替换进去。{$name} 会被替换成 张三。
这和 JavaScript 的模板字符串(`我叫${name}`)、Python 的 f-string(f"我叫{name}")功能相同。
如果只用单引号包裹字符串,变量不会被替换:
echo '我叫{$name}'; // 输出:我叫{$name}(字面量,不替换)
字符串拼接:用点号
echo "我喜欢的水果有:" . implode("、", $fruits);
PHP 用点号 . 来拼接字符串,而不是 +(JS/Python 用 +)。+ 在 PHP 中只做数学加法。
echo "Hello " . "World"; // Hello World
echo "5" + "3"; // 8(数字加法,自动类型转换)
数组
$fruits = ["苹果", "香蕉", "橘子"];
PHP 的数组用方括号 [] 包裹,和 JS/Python 一样。implode("、", $fruits) 把数组元素用顿号连接成一个字符串,相当于 JS 的 arr.join("、") 或 Python 的 "、".join(arr)。
条件判断
if ($score >= 90) {
echo "等级:优秀";
} elseif ($score >= 80) {
echo "等级:良好";
} else {
echo "等级:不及格";
}
和 C 语言、JavaScript 几乎完全一样——条件用括号包裹,代码块用花括号。唯一的区别是 else if 在 PHP 中既可以写 else if(和 C/JS 一样),也可以写 elseif(连在一起,PHP 特有的写法)。
循环
for ($i = 1; $i <= 5; $i++) {
echo $i . " ";
}
和 C 语言、JavaScript 的 for 循环完全一样——三要素(初始化、条件、更新)用分号分隔。唯一的区别是循环变量也要加 $ 前缀。
八、PHP 和 HTML 的混合编写
这是 PHP 最独特的特性——在一个文件中混合写 HTML 和 PHP:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP + HTML 混合演示</title>
<style>
body { font-family: sans-serif; padding: 40px; }
.card { background: #f0f4f8; padding: 20px; border-radius: 10px; margin: 10px 0; }
</style>
</head>
<body>
<h1>用户列表</h1>
<?php
$users = [
["name" => "张三", "age" => 28, "city" => "上海"],
["name" => "李四", "age" => 22, "city" => "北京"],
["name" => "王五", "age" => 25, "city" => "广州"],
];
foreach ($users as $user) {
?>
<!-- HTML 部分:用 PHP 变量填充内容 -->
<div class="card">
<h3><?php echo $user["name"]; ?></h3>
<p>年龄:<?php echo $user["age"]; ?> 岁</p>
<p>城市:<?php echo $user["city"]; ?></p>
</div>
<?php
}
?>
</body>
</html>
代码解析:
- 在
<?php foreach ... { ?>和<?php } ?>之间,是HTML 代码。 - 这个 HTML 代码会被 PHP 循环执行——每个用户生成一个
.card的 div。 - 在 HTML 中使用
<?php echo $user["name"]; ?>来动态输出 PHP 变量的值。 - 这和你在 Node.js 中用模板引擎(EJS/Pug)或者前端框架(React/Vue)做的事情完全一样——把数据渲染成 HTML。不同的是,PHP 不需要额外的模板引擎,它本身就是模板引擎。
这种”嵌入 HTML”的方式在大型项目中已经不推荐了(现在更流行前后端分离),但在学习阶段,它能让你直观地看到”后端怎么生成前端页面”。
九、PHP 内置服务器和文件组织
PHP 内置开发服务器会从当前文件夹自动寻找以下文件作为首页:
index.phpindex.html
当你访问 http://localhost:8080 时,服务器会自动返回 index.php 的执行结果。如果要访问其他文件,需要在 URL 中指定文件名:
http://localhost:8080/about.php
http://localhost:8080/contact.php
要停止服务器,在终端中按 Ctrl + C。
十、本篇动手练习
练习 1:安装环境并运行第一个程序
按本文第五节的指引,安装 PHP 并验证版本。用内置服务器启动项目,把第六节的代码保存为 index.php,在浏览器中访问。
练习 2:修改输出内容
修改 index.php,把变量 $name 改成你自己的名字,$fruits 改成你喜欢的三种水果。刷新浏览器观察变化。
练习 3:写一个个人信息页面
新建 about.php,用 PHP + HTML 混合编写,输出你的个人信息:姓名、年龄、职业、所在地、兴趣爱好列表。用 PHP 变量存储所有数据,用 HTML 渲染结构,用 CSS 做简单美化。
练习 4:制造并修复错误
故意在 PHP 代码中做以下修改,观察报错信息:
- 删掉一个分号。
- 变量忘了写
$符号(写成name而不是$name)。 - 把
echo写成不存在的单词。
学会阅读 PHP 的报错信息。PHP 会告诉你哪个文件、第几行出了什么错。这是调试的基本功。
十一、本篇小结
这一篇你正式进入了 PHP 的世界:
- PHP 是什么:一门专门为 Web 开发设计的服务器端脚本语言。可以直接嵌入 HTML,部署极简。
- PHP 和你学过的语言的关系:语法从 C 语言继承(分号、花括号、for/while/if),变量以
$开头,字符串用点号拼接。动态类型,和 JS/Python 一样灵活。 - 安装 PHP:从官网下载安装,用
php -v验证,用php -S localhost:8080启动内置开发服务器。 - 第一个 PHP 程序:
<?php ... ?>包裹代码,echo输出内容,$变量名声明变量,双引号支持变量插值。 - PHP + HTML 混合编写:
foreach循环中嵌入 HTML,用<?php echo $var; ?>输出动态数据。
PHP 是一门让 Web 开发”回到简单”的语言。下一篇,我们正式进入 PHP 语法基础——变量、数据类型、运算符、输入输出。你会看到 PHP 的数组比任何语言都强大,它的关联数组就是字典,索引数组就是列表,两者还可以混用。
下一篇预告
下一篇——《PHP 语法基础:变量、数据类型、输出》:详细讲解 PHP 的变量命名规则、所有基本数据类型(字符串、整数、浮点数、布尔值、NULL)、echo 和 print 的区别、字符串拼接和插值、类型转换、以及 PHP 特有的可变变量。
PHP 零基础入门,每周更新。













暂无评论内容