
PHP 是一种专为 Web 开发而生的服务器端脚本语言。自 1995 年诞生以来它驱动了全球超过 75% 的网站包括 Facebook、维基百科、Slack 等巨头。虽然近年有 Node.js、Python 等挑战者但 PHP 凭借其低门槛、丰富的生态和持续的演进尤其是 PHP 8 引入的 JIT 编译器和现代语法依然是后端开发的首选之一。本文将带你从零开始系统掌握 PHP 的核心概念、最佳实践以及现代开发范式。一、PHP 是什么为什么选择它PHPPHP: Hypertext Preprocessor是一种开源的、服务端执行的脚本语言特别适合 Web 开发并可嵌入 HTML。其优势包括低学习曲线类似 C/Java 的语法大量内置函数新手能快速产出。广泛宿主支持几乎所有共享主机都支持 PHP部署成本低。强大生态成熟的框架Laravel、Symfony、ThinkPHP、包管理器Composer和丰富的扩展库。持续革新PHP 8 引入 JIT、属性、匹配表达式等现代特性性能大幅提升。社区庞大遇到问题容易找到解决方案学习资源丰富。1.1 PHP 可以做什么动态生成网页内容最常见处理表单数据、文件上传操作数据库MySQL, PostgreSQL, SQLite 等会话管理、用户认证图像处理、PDF 生成命令行脚本定时任务、数据处理开发 RESTful API二、环境准备快速运行 PHP2.1 集成开发环境推荐新手XAMPP跨平台Windows/macOS/Linux包含 Apache MySQL PHP phpMyAdmin。MAMPmacOS 经典选择。LaragonWindows 轻量级或Docker专业开发。2.2 检查 PHP 版本在终端/命令提示符中运行bashphp -v建议使用 PHP 8.1 或更高版本。2.3 第一个 PHP 脚本创建index.php文件?php echo Hello, PHP!; ?在浏览器访问http://localhost/index.php假设 Web 服务器已启动。PHP 代码必须包含在?php ?标签内短标签? ?不推荐使用。三、基础语法变量、数据类型与运算符3.1 变量以$开头无需显式声明类型类型是动态的。$name 张三; $age 25; $price 19.99; $isActive true;3.2 数据类型标量int,float,string,bool复合array,object,callable,iterable特殊null,resource$nums [1, 2, 3]; // 索引数组 $user [name 李四, age 30]; // 关联数组键值对 $empty null;3.3 运算符算术 - * / % **字符串连接.注意不是比较值相等、全等类型也相同、!、、!、、等逻辑、||、!赋值、、-等三元$result $score 60 ? 及格 : 不及格空合并$username $_GET[user] ?? 匿名;PHP 7 特性3.4 控制结构// if...elseif...else if ($score 90) { echo 优秀; } elseif ($score 60) { echo 及格; } else { echo 不及格; } // switch switch ($color) { case red: echo 红色; break; default: echo 其他; } // 循环 for ($i 0; $i 5; $i) { /* ... */ } foreach ($users as $index $user) { echo $index: $user; } while ($condition) { /* ... */ } do { /* ... */ } while ($condition);3.5 函数function add(int $a, int $b): int { return $a $b; } echo add(5, 10); // 15 // 默认参数 function greet($name 访客) { echo 你好$name; } // 可变参数 function sum(...$numbers) { return array_sum($numbers); }四、数组高级操作PHP 数组非常灵活既可以是列表也可以是字典还可以嵌套。4.1 常用数组函数$arr [5, 2, 8, 1]; sort($arr); // 排序升序 rsort($arr); // 降序 asort($assoc); // 保持键值关联的排序 count($arr); // 长度 array_push($arr, 10); // 末尾添加 array_pop($arr); // 末尾弹出 array_merge($a, $b); // 合并 array_keys($assoc); // 获取所有键 array_values($assoc); // 获取所有值 in_array(5, $arr); // 检查是否存在 array_map(strtoupper, $arr); // 回调映射 array_filter($arr, fn($n) $n 3); // 过滤PHP 7.4 箭头函数4.2 遍历foreach ($students as $name $score) { echo $name 的分数是 $score\n; }五、面向对象编程OOPPHP 支持完整的面向对象特性是现代大型项目的基石。5.1 类与对象class User { // 属性建议使用类型声明PHP 7.4 private int $id; public string $name; protected string $email; // 构造函数 public function __construct(int $id, string $name, string $email) { $this-id $id; $this-name $name; $this-email $email; } // 方法 public function getInfo(): string { return ID: {$this-id}, Name: {$this-name}; } // 静态方法 public static function createDefault(): self { return new self(0, Guest, guestexample.com); } } $user new User(1, Alice, aliceexample.com); echo $user-getInfo();5.2 继承与多态class Admin extends User { public function getInfo(): string { return 管理员 . parent::getInfo(); } }5.3 接口与抽象类interface Logger { public function log(string $message): void; } class FileLogger implements Logger { public function log(string $message): void { file_put_contents(app.log, $message . PHP_EOL, FILE_APPEND); } }5.4 Trait代码复用trait Singleton { private static $instance; public static function getInstance() { /*...*/ } }5.5 命名空间组织代码// 文件src/Controllers/UserController.php namespace App\Controllers; class UserController { /*...*/ } // 使用时 use App\Controllers\UserController; $ctrl new UserController();六、表单处理与 HTTP 交互6.1 超级全局变量$_GETURL 查询参数$_POST表单 POST 数据$_REQUEST包含 GET、POST 和 COOKIE不推荐$_SERVER服务器和执行环境信息$_SESSION会话变量$_COOKIE客户端存储6.2 处理 GET 请求// URL: /search.php?qphppage2 $query $_GET[q] ?? ; $page isset($_GET[page]) ? (int)$_GET[page] : 1;6.3 处理 POST 请求form methodpost actionsubmit.php input typetext nameusername input typesubmit /form// submit.php if ($_SERVER[REQUEST_METHOD] POST) { $username htmlspecialchars($_POST[username]); // 防 XSS echo 欢迎: $username; }6.4 文件上传form enctypemultipart/form-data methodpost input typefile nameavatar /formif ($_FILES[avatar][error] UPLOAD_ERR_OK) { $tmpName $_FILES[avatar][tmp_name]; $dest uploads/ . basename($_FILES[avatar][name]); move_uploaded_file($tmpName, $dest); }七、数据库操作PDO 和 MySQLi7.1 为什么选择 PDOPDOPHP Data Objects提供统一的 API 支持多种数据库并支持预处理语句有效防止 SQL 注入。7.2 连接与查询$dsn mysql:hostlocalhost;dbnametest;charsetutf8mb4; $pdo new PDO($dsn, root, password); $pdo-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 查询使用预处理语句 $stmt $pdo-prepare(SELECT * FROM users WHERE id :id); $stmt-execute([id $userId]); $user $stmt-fetch(PDO::FETCH_ASSOC); // 插入 $insert $pdo-prepare(INSERT INTO users (name, email) VALUES (?, ?)); $insert-execute([张三, zhangexample.com]);7.3 获取多行$stmt $pdo-query(SELECT * FROM users); $users $stmt-fetchAll(PDO::FETCH_ASSOC); foreach ($users as $user) { echo $user[name]; }7.4 事务处理$pdo-beginTransaction(); try { // 多条 SQL $pdo-commit(); } catch (Exception $e) { $pdo-rollBack(); throw $e; }八、会话管理与 Cookie8.1 Session// 开启会话必须在任何输出前 session_start(); // 存储数据 $_SESSION[user_id] 123; $_SESSION[username] alice; // 读取 if (isset($_SESSION[user_id])) { echo 欢迎 . $_SESSION[username]; } // 销毁 session_destroy();8.2 Cookie// 设置 Cookie有效期为 1 小时 setcookie(theme, dark, time() 3600, /); // 读取 echo $_COOKIE[theme] ?? 默认主题;九、文件包含与错误处理9.1 文件包含include包含文件如果失败产生警告脚本继续执行。require如果失败产生致命错误脚本停止。include_once/require_once确保只包含一次。require_once config/database.php; include header.php;9.2 错误处理// 使用 try...catch try { $pdo new PDO(...); } catch (PDOException $e) { error_log($e-getMessage()); // 记录日志 die(数据库连接失败请稍后再试); } // 自定义错误处理器 set_error_handler(function($errno, $errstr) { echo 发生错误: $errstr; });十、Composer依赖管理利器Composer 是 PHP 的包管理器类似 npm 或 pip。10.1 安装 Composer访问 getcomposer.org 下载安装。10.2 使用 Composer创建composer.json{ require: { monolog/monolog: ^2.0, guzzlehttp/guzzle: ^7.0 } }运行composer install下载依赖。所有库会放在vendor/目录并自动生成vendor/autoload.php。10.3 自动加载自己的类在composer.json中添加autoload: { psr-4: { App\\: src/ } }然后执行composer dump-autoload。之后在入口文件引入vendor/autoload.php即可使用App\Controller\HomeController等。十一、现代 PHP 特性PHP 8PHP 8 带来了革命性改进以下是最常用的特性11.1 命名参数function createUser($name, $age, $email) { /*...*/ } createUser(email: testexample.com, name: 张三, age: 20);11.2 构造函数属性提升class User { public function __construct( private int $id, public string $name, protected ?string $email null ) {} }11.3 联合类型function formatValue(int|string $value): string { ... }11.4 match 表达式比 switch 更简洁$statusCode 404; $message match($statusCode) { 200 OK, 404 Not Found, default Unknown };11.5 nullsafe 运算符$city $user?-getAddress()?-getCity() ?? 未知;11.6 属性注解#[Route(/api/users, methods: [GET])] class UserController { /*...*/ }11.7 JIT即时编译PHP 8 引入了 JIT可提升 CPU 密集型任务如数学计算的性能。通常在php.ini中配置。十二、安全性最佳实践防止 SQL 注入始终使用预处理语句PDO 或 MySQLi 的prepare/execute永远不要直接拼接 SQL。防止 XSS输出到 HTML 时使用htmlspecialchars($string, ENT_QUOTES, UTF-8)。密码哈希使用password_hash()和password_verify()。$hashed password_hash($password, PASSWORD_DEFAULT); if (password_verify($input, $hashed)) { /* 正确 */ }文件上传安全限制文件类型和大小使用is_uploaded_file()和move_uploaded_file()不要直接信任用户提供的文件名。会话安全使用session_regenerate_id()防止会话固定攻击设置 Cookie 的HttpOnly和Secure标志。CSRF 防护在表单中加入 CSRF token 并验证。错误显示生产环境禁用display_errors改为记录日志。十三、现代 PHP 生态与框架13.1 主流框架Laravel优雅、功能全面社区最大Eloquent ORM、Blade 模板、队列等。Symfony组件化强适合大型复杂项目许多框架使用其组件。ThinkPHP国内流行的框架简洁快速。Slim微框架适合 API 开发。13.2 开发工具PHPStormIDE付费或VS Code配合 PHP Intelephense 插件。Xdebug调试工具。PHPUnit单元测试。PHP_CodeSniffer代码规范检查。十四、部署与运行14.1 传统部署将代码上传到 Web 服务器Apache/Nginx的文档根目录如public_html配置好 PHP 环境即可。14.2 现代部署使用Nginx PHP-FPM提升性能。通过Docker容器化部署保证环境一致性。使用EnvoyLaravel 工具或Deployer自动化部署。14.3 命令行脚本