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,省去了配置环境的麻烦。

安装步骤:

  1. 下载PHPStudy(官网或镜像站)
  2. 双击安装,选择安装路径(不要有中文)
  3. 启动Apache/Nginx和MySQL
  4. 在WWW目录下创建项目文件夹
  5. 浏览器访问 http://localhost/项目名
我的小技巧: PHPStudy支持多版本PHP切换。我习惯同时装PHP 7.4和PHP 8.1,老项目用7.4,新项目用8.1。切换时点一下就行,非常方便。

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扩展时踩过坑。比如安装pdo_mysql扩展,需要在Dockerfile里加 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_errorserror_reporting = E_ALL。很多新手遇到白屏就慌了,其实打开错误显示就能看到具体问题。生产环境记得关掉,不然会暴露敏感信息。

1.5 本章小结

PHP从1994年走到今天,经历了从个人工具到企业级语言的蜕变。环境搭建是第一步,我建议新手先用PHPStudy快速上手,等熟悉了再切到Docker。配置方面,记住几个关键参数就行,不用死记硬背。

下一章我们会深入PHP基础语法和面向对象编程。到时候我会分享一些写代码的小习惯——比如我为什么坚持用类型声明,以及如何避免常见的坑。咱们下章见。