1. PHP基础与环境搭建:PHP发展史、应用场景、开发环境搭建与配置
1.1 PHP发展史:从个人工具到全球霸主
PHP诞生于1994年,最初是Rasmus Lerdorf用C语言写的一组Perl脚本。说白了,就是他自己建个人主页用的工具。我刚开始学PHP那会儿,还用过PHP/FI 2.0,那时候连面向对象都没有,写代码全靠函数堆。
真正让PHP火起来的,是PHP 3和PHP 4。PHP 3引入了Zend引擎,性能大幅提升。PHP 4则让面向对象编程成为可能。我记得2004年做第一个商业项目时,用的就是PHP 4,那时候模板引擎还是自己手写的。
PHP 5是里程碑式的版本。2004年发布,引入了完整的面向对象模型、异常处理、PDO数据库抽象层。我当年从PHP 4迁移到PHP 5时,踩了不少坑——特别是对象引用传递的差异,代码改得我头大。
PHP 7是性能飞跃。2015年发布,基于PHPNG项目,性能比PHP 5.6提升两倍。内存占用也大幅降低。我有个项目从PHP 5.6升级到PHP 7.2后,服务器从4台减到1台,成本直接砍掉75%。
PHP 8是2020年发布的。引入了JIT编译器、命名参数、联合类型、match表达式等现代特性。说实话,PHP 8的JIT在Web场景下提升不算特别明显,但语法糖确实让代码更优雅了。
- PHP/FI 2.0 (1997) — 个人工具阶段
- PHP 3 (1998) — Zend引擎诞生
- PHP 4 (2000) — 面向对象初探
- PHP 5 (2004) — 成熟OOP、PDO、异常
- PHP 7 (2015) — 性能飞跃
- PHP 8 (2020) — JIT、现代语法
1.2 应用场景:PHP到底能干什么?
很多人说PHP只能做Web开发。其实不然。我这些年用PHP做过不少有意思的东西。
Web应用开发是PHP的主战场。全球超过77%的网站使用PHP,包括Facebook、Wikipedia、WordPress。为什么?部署简单,上手快,生态成熟。你想想看,一个Laravel项目从零到上线,可能只需要一周。
API接口开发是PHP的强项。特别是RESTful API,配合JSON输出,PHP处理起来得心应手。我做过一个日请求量500万+的API系统,PHP扛得住,关键是架构设计要合理。
命令行脚本也是PHP的用武之地。数据迁移、定时任务、日志分析,PHP都能干。我用PHP写过爬虫、数据清洗工具,甚至做过简单的消息队列消费者。
微服务架构中PHP也能占一席之地。虽然不如Go或Java那么适合,但配合Swoole或Workerman,PHP也能做高性能微服务。我有个朋友用Swoole做游戏后端,单机支撑10万并发连接。
| 应用场景 | 典型框架/工具 | 我的建议 |
|---|---|---|
| Web应用 | Laravel, Symfony, ThinkPHP | 新手首选Laravel |
| API开发 | Lumen, Slim, Hyperf | 轻量级选Slim |
| 命令行 | Symfony Console, Laravel Artisan | 直接上Symfony Console |
| 高性能服务 | Swoole, Workerman | 有经验再碰Swoole |
1.3 开发环境搭建:PHPStudy vs Docker
环境搭建是每个PHP开发者都要过的第一关。我见过太多新手卡在这一步。嗯,这里要注意,选对工具能省很多事。
1.3.1 PHPStudy:新手友好的一键集成
PHPStudy是国内最流行的PHP集成环境。它把Apache/Nginx、MySQL、PHP、phpMyAdmin打包在一起,一键安装。我刚开始带团队时,给新人统一装PHPStudy,省去了配置环境的麻烦。
安装步骤:
- 下载PHPStudy(官网或镜像站)
- 双击安装,选择安装路径(不要有中文)
- 启动Apache/Nginx和MySQL
- 在WWW目录下创建项目文件夹
- 浏览器访问 http://localhost/项目名
1.3.2 Docker:生产级环境一致性
Docker是现在的主流方案。它解决了「在我电脑上能跑」的经典问题。我强烈建议有一定经验的开发者用Docker。
为什么?因为PHPStudy虽然方便,但和生产环境可能有差异。比如PHPStudy默认用Apache,但生产环境可能是Nginx。Docker可以做到开发环境和生产环境完全一致。
一个简单的PHP Docker配置:
# docker-compose.yml
version: '3.8'
services:
php:
image: php:8.1-fpm
volumes:
- ./app:/var/www/html
ports:
- "9000:9000"
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./app:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: myapp
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
docker-php-ext-install pdo_mysql。别问我怎么知道的——项目上线前一天才发现数据库连不上,那叫一个酸爽。
1.3.3 两种方案对比
| 对比项 | PHPStudy | Docker |
|---|---|---|
| 上手难度 | 极低,5分钟搞定 | 中等,需理解容器概念 |
| 环境一致性 | 一般,和生产环境有差异 | 高,完全一致 |
| 多项目隔离 | 差,共用一套环境 | 好,每个项目独立容器 |
| 性能 | 原生性能 | 略有损耗(可忽略) |
| 推荐人群 | 新手、快速原型 | 团队协作、生产级开发 |
1.4 PHP配置优化:让开发环境更顺手
环境搭好了,还得调一调配置。我每次搭新环境都会做这几件事:
php.ini 关键配置:
; 错误显示(开发环境必开)
display_errors = On
error_reporting = E_ALL
; 上传限制
upload_max_filesize = 20M
post_max_size = 20M
; 执行时间
max_execution_time = 30
; 内存限制
memory_limit = 128M
; 时区
date.timezone = Asia/Shanghai
; 开启OPcache(PHP 7+ 强烈推荐)
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
display_errors 和 error_reporting = E_ALL。很多新手遇到白屏就慌了,其实打开错误显示就能看到具体问题。生产环境记得关掉,不然会暴露敏感信息。
1.5 本章小结
PHP从1994年走到今天,经历了从个人工具到企业级语言的蜕变。环境搭建是第一步,我建议新手先用PHPStudy快速上手,等熟悉了再切到Docker。配置方面,记住几个关键参数就行,不用死记硬背。
下一章我们会深入PHP基础语法和面向对象编程。到时候我会分享一些写代码的小习惯——比如我为什么坚持用类型声明,以及如何避免常见的坑。咱们下章见。