第 1 章 — PHP 简介
第 1 章 — PHP 简介:历史、版本演进与适用场景
1.1 PHP 是什么
PHP(全称 PHP: Hypertext Preprocessor)是一种广泛使用的开源服务端脚本语言,特别适合 Web 开发。它可以嵌入 HTML 中,也可以作为独立的命令行工具运行。
<?php
echo "Hello, PHP!";
PHP 代码通常写在
<?php ... ?>标签内,但现代 PHP 实践中,纯 PHP 文件建议省略闭合标签?>,以避免尾部空白导致的 headers already sent 错误。
1.2 PHP 发展历史
| 年份 | 里程碑 | 说明 |
|---|---|---|
| 1994 | PHP/FI | Rasmus Lerdorf 创建,最初用于跟踪访客 |
| 1997 | PHP 3 | Zeev Suraski 和 Andi Gutmans 重写核心 |
| 2000 | PHP 4 | 引入 Zend Engine 1.0 |
| 2004 | PHP 5 | 引入真正的 OOP、PDO、异常处理 |
| 2015 | PHP 7 | 引入 Zend Engine 3.0,性能翻倍 |
| 2020 | PHP 8.0 | JIT 编译器、Union Types、Attributes、Named Arguments |
| 2021 | PHP 8.1 | Enums、Fibers、Intersection Types、readonly |
| 2022 | PHP 8.2 | Disjunctive Normal Form (DNF) Types、Readonly Classes |
| 2023 | PHP 8.3 | 类型化类常量、json_validate()、#[Override] |
| 2024 | PHP 8.4 | Property Hooks、Asymmetric Visibility、new 不再需要括号 |
1.3 PHP 8.x 现代特性速览
1.3.1 JIT 编译器
PHP 8.0 引入了 Just-In-Time (JIT) 编译器。它将频繁执行的热点代码编译为机器码,显著提升 CPU 密集型任务的性能。
# php.ini 配置
opcache.enable=1
opcache.jit=1255
opcache.jit_buffer_size=64M
注意:JIT 对 Web 请求的提升有限(因为请求生命周期短),主要受益于长时间运行的 CLI 任务和数学计算。
1.3.2 Union Types(联合类型)
<?php
function formatId(int|string $id): string
{
return "ID: {$id}";
}
echo formatId(42); // 输出: ID: 42
echo formatId("abc-123"); // 输出: ID: abc-123
1.3.3 Named Arguments(命名参数)
<?php
// 传统写法
str_replace('old', 'new', $string);
// 命名参数写法 — 可跳过默认参数,提高可读性
htmlspecialchars($string, double_encode: false);
1.3.4 Match 表达式
<?php
$status = 404;
$message = match ($status) {
200 => 'OK',
301 => 'Moved Permanently',
404 => 'Not Found',
500 => 'Internal Server Error',
default => 'Unknown Status',
};
echo $message; // 输出: Not Found
1.3.5 Enums(枚举)
<?php
enum Suit: string
{
case Hearts = 'hearts';
case Diamonds = 'diamonds';
case Clubs = 'clubs';
case Spades = 'spades';
}
$card = Suit::Hearts;
echo $card->value; // 输出: hearts
1.3.6 Fibers(纤程)
<?php
$fiber = new Fiber(function (): void {
$value = Fiber::suspend('fiber started');
echo "Resumed with: $value\n";
});
$result = $fiber->start();
echo "Fiber says: $result\n";
$fiber->resume('hello');
1.4 PHP 适用场景
| 场景 | 说明 | 代表项目 |
|---|---|---|
| Web 应用开发 | 最传统场景,CMS、电商平台 | WordPress, Magento |
| RESTful API | JSON API 后端 | Laravel, Symfony |
| 命令行工具 (CLI) | 脚本、任务调度、数据迁移 | Artisan Commands |
| 队列/异步任务 | 配合 Laravel Horizon, Swoole | 队列消费者 |
| 微服务 | 使用 Swoole/Hyperf 高性能框架 | Hyperf, Swoft |
| 内容管理系统 (CMS) | WordPress 市占率 43%+ | WordPress, Drupal |
| 电子商务 | 在线商城、支付集成 | WooCommerce, Shopify |
不太适合的场景
- 实时应用(WebSocket 长连接需要 Swoole/OpenSwoole)
- 桌面 GUI(没有原生 GUI 库)
- 嵌入式/IoT(内存占用较高)
- 科学计算(Python 生态更成熟)
1.5 PHP 与其他语言对比
| 特性 | PHP | Python | Node.js | Go |
|---|---|---|---|---|
| 学习曲线 | ⭐⭐ 低 | ⭐⭐ 低 | ⭐⭐⭐ 中 | ⭐⭐⭐⭐ 高 |
| Web 框架成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 并发模型 | 进程/Fiber | asyncio | 事件循环 | goroutine |
| 类型系统 | 渐进式 | 动态 | 动态 (TS 渐进) | 静态 |
| 包管理器 | Composer | pip | npm | go mod |
| 主要宿主环境 | Web | Web/数据/ML | Web/CLI | CLI/服务 |
1.6 PHP 生态系统概览
┌─────────────────────────────────────────────────────┐
│ PHP 生态系统 │
├──────────────┬──────────────┬───────────────────────┤
│ 包管理 │ 框架 │ 工具链 │
│ Composer │ Laravel │ PHPUnit │
│ Packagist │ Symfony │ PHPStan │
│ │ Slim │ PHP-CS-Fixer │
├──────────────┼──────────────┼───────────────────────┤
│ 数据库 │ 模板引擎 │ 服务器 │
│ Doctrine │ Blade │ PHP-FPM │
│ Eloquent │ Twig │ Swoole │
│ Laravel DB │ Livewire │ RoadRunner │
├──────────────┼──────────────┼───────────────────────┤
│ API │ 测试 │ 部署 │
│ API Platform│ Pest │ Docker │
│ Lumen │ Mockery │ Laravel Forge │
│ Fractal │ Behat │ Kubernetes │
└──────────────┴──────────────┴───────────────────────┘
1.7 业务场景:为什么选择 PHP
场景 1:快速构建 MVP
创业团队需要在 2-4 周内发布产品原型。Laravel 提供开箱即用的认证、ORM、队列、缓存,配合 Composer 的海量包,可以极快地搭建功能。
场景 2:内容驱动网站
WordPress 全球市占率超过 43%,拥有庞大的插件和主题生态。对于博客、企业官网、新闻站点,PHP 是首选。
场景 3:电商系统
Magento、WooCommerce、PrestaShop 等成熟的电商解决方案都基于 PHP,提供了完整的产品管理、支付、物流能力。
1.8 扩展阅读
- PHP 官方文档
- PHP: The Right Way
- PHP RFC 列表 — 了解新特性提案
- Packagist — PHP 包仓库
- Laravel 文档
- Symfony 文档
- PHP-FIG — PHP Framework Interop Group(PSR 标准)