强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第 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 发展历史

年份里程碑说明
1994PHP/FIRasmus Lerdorf 创建,最初用于跟踪访客
1997PHP 3Zeev Suraski 和 Andi Gutmans 重写核心
2000PHP 4引入 Zend Engine 1.0
2004PHP 5引入真正的 OOP、PDO、异常处理
2015PHP 7引入 Zend Engine 3.0,性能翻倍
2020PHP 8.0JIT 编译器、Union Types、Attributes、Named Arguments
2021PHP 8.1Enums、Fibers、Intersection Types、readonly
2022PHP 8.2Disjunctive Normal Form (DNF) Types、Readonly Classes
2023PHP 8.3类型化类常量、json_validate()#[Override]
2024PHP 8.4Property 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 APIJSON 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 与其他语言对比

特性PHPPythonNode.jsGo
学习曲线⭐⭐ 低⭐⭐ 低⭐⭐⭐ 中⭐⭐⭐⭐ 高
Web 框架成熟度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
并发模型进程/Fiberasyncio事件循环goroutine
类型系统渐进式动态动态 (TS 渐进)静态
包管理器Composerpipnpmgo mod
主要宿主环境WebWeb/数据/MLWeb/CLICLI/服务

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 扩展阅读


下一章第 2 章 — 环境安装:PHP、Composer 与 IDE 配置