说明:PHP 8.4已于2024年11月正式发布,PHP 8.5预计2025年11月发布。本文撰写时8.5尚未正式发布,部分内容基于8.5的开发版本和RFC,最终特性以正式发布版本为准。

最近有朋友问我,想学习PHP,应该怎么入门?现在PHP都到8.4了,马上要出8.5了,新版本变化这么大,不知道从哪学起。

我用PHP已经很多年了,从PHP 5.6用到现在的8.4,也在关注8.5的开发。这篇文章,我想分享一下PHP 8.4和8.5的学习路线,以及我自己的入门经验。从环境搭建、基础语法到新特性、最佳实践,聊聊PHP新版本的变化和学习方法。

如果你是PHP新手,或者想从旧版本升级到新版本,希望这篇文章能给你一些参考。

先说明一下,我主要做Web后端开发,用的是Laravel框架。这篇文章的学习路线,主要是针对Web后端开发的。如果你做的是其他方向,比如命令行工具、桌面应用,可能需要调整一下。

为什么要学PHP 8.4/8.5

先说说为什么要学PHP 8.4和8.5,而不是学更老的版本。

很多人对PHP的印象还停留在PHP 5的时代,觉得PHP是一种很烂的语言,语法混乱,性能差,不安全。但实际上,从PHP 7开始,PHP已经发生了翻天覆地的变化。PHP 7的性能比PHP 5提升了两倍,语法也越来越规范。到了PHP 8,更是加入了很多现代化的特性,比如命名参数、联合类型、匹配表达式、属性提升、枚举、Fiber等。

PHP 8.4和8.5,在之前的基础上,又加入了很多新特性,让PHP变得更现代、更安全、更高效。

具体来说,PHP 8.4和8.5的优势有:

第一,性能更好。PHP 8.4在性能上又有提升,特别是在内存使用和执行速度方面。8.5预计会有更多的性能优化。用最新版本的PHP,你的应用会跑得更快,服务器成本更低。

第二,语法更现代。PHP 8.4和8.5加入了很多现代化的语法特性,比如属性钩子、异步函数、显式类字段初始化、新的数组函数等。这些特性能让你的代码更简洁、更易读、更易维护。

第三,类型系统更完善。PHP从7.0开始加入了类型声明,到了8.4和8.5,类型系统已经非常完善了。有标量类型、返回类型、联合类型、交集类型、纯类型、可空类型等。完善的类型系统,能让你的代码更安全,减少运行时错误,也让IDE的代码提示更准确。

第四,安全性更好。PHP 8.4和8.5在安全性方面也有提升,比如默认使用更安全的密码哈希算法、移除了一些不安全的特性、加强了数据过滤等。用最新版本的PHP,你的应用会更安全。

第五,生态更活跃。PHP的生态非常活跃,有Composer包管理系统,有Laravel、Symfony等优秀的框架,有PHPUnit、Psalm等开发工具。最新版本的PHP,能享受到生态系统最新的特性和支持。很多框架和库,已经开始要求PHP 8.1+甚至8.2+了。

所以,如果你要学PHP,就学最新的版本。不要学PHP 5或者PHP 7了,那些版本已经过时了,很多特性已经被废弃了。直接从PHP 8.4开始学,一步到位。

第一步:环境搭建

学习PHP的第一步,是搭建开发环境。

PHP的开发环境搭建很简单,有几种方式:

第一,用集成环境。比如XAMPP、WAMP、MAMP、phpEnv等。这些集成环境把PHP、Apache/Nginx、MySQL都打包好了,一键安装,非常方便。适合新手,不用折腾配置。

我自己用的是phpEnv,这是一个Windows下的PHP集成环境,支持多版本PHP切换,用起来很方便。

第二,用Docker。Docker是一种容器化技术,可以在容器里运行PHP、Nginx、MySQL等服务。用Docker的好处是,环境和系统隔离,不会污染本地环境,而且可以很方便地切换PHP版本。适合有一定经验的开发者。

第三,用虚拟机。比如用VirtualBox或者VMware装一个Linux虚拟机,在虚拟机里搭建PHP环境。这种方式比较重,现在用的人少了,大部分都用Docker代替了。

对于新手,我建议用集成环境,比如XAMPP或者phpEnv。一键安装,不用折腾,先把环境跑起来,能写代码就行。等有了一定的基础,再考虑用Docker。

安装好环境之后,验证一下PHP是否安装成功。在命令行输入:

php -v

如果显示PHP的版本信息,说明安装成功了。

然后,在Web根目录下创建一个index.php文件,内容是:

<?php
phpinfo();

在浏览器里访问这个文件,如果显示PHP的信息页面,说明Web环境也搭建成功了。

环境搭建好了,就可以开始写代码了。

第二步:基础语法

环境搭建好之后,就开始学习PHP的基础语法。

PHP的基础语法包括:

第一,变量和数据类型。PHP的变量用$符号开头,比如$name = "张三"。PHP的数据类型有字符串、整数、浮点数、布尔值、数组、对象、null等。PHP是弱类型语言,变量的类型是根据值自动推断的。但从PHP 7开始,支持了类型声明,可以指定变量和函数的类型。

第二,运算符。PHP的运算符有算术运算符(+、-、*、/、%)、字符串运算符(.)、比较运算符(==、===、!=、!==、<、>、<=、>=)、逻辑运算符(&&、||、!)、赋值运算符(=、+=、-=等)、递增递减运算符(++、--)等。

第三,控制结构。PHP的控制结构有if-else、switch、for、while、do-while、foreach等。和其他语言差不多,语法略有不同。

第四,函数。PHP的函数用function关键字定义,比如function add($a, $b) { return $a + $b; }。PHP支持默认参数、可变参数、引用传递、返回类型声明等。PHP有很多内置函数,比如字符串处理函数、数组处理函数、日期时间函数等,要熟悉常用的内置函数。

第五,数组。PHP的数组是一种非常强大的数据结构,可以是索引数组,也可以是关联数组。数组的操作函数很多,比如arraymap、arrayfilter、arrayreduce、arraymerge、array_slice等,要熟练掌握。

第六,面向对象。PHP是支持面向对象的,有类、对象、继承、接口、抽象类、trait、命名空间等特性。面向对象是PHP开发的基础,特别是用框架开发的时候,到处都是面向对象的代码。

第七,异常处理。PHP的异常处理用try-catch-finally,和其他语言差不多。PHP 8之后,异常处理更完善了,有Error异常、Throwable接口等。

第八,命名空间和自动加载。PHP的命名空间用来解决类名和函数名的冲突问题,自动加载用来在使用类的时候自动加载类文件。Composer是PHP的包管理工具,也是自动加载的标准实现,一定要学会用。

这些基础语法,是PHP的核心,一定要掌握扎实。可以通过写一些小练习来巩固,比如写一个计算器、写一个待办事项列表、写一个简单的博客系统。

学习基础语法的时候,推荐看PHP官方手册。PHP的官方手册写得非常好,有详细的说明和示例,而且是中文的。遇到不懂的函数或者语法,查官方手册就行了。

第三步:PHP 8.4的新特性

掌握了基础语法之后,就可以学习PHP 8.4的新特性了。

PHP 8.4加入了很多新特性,这里介绍几个最重要的:

第一,属性钩子(Property Hooks)。这是PHP 8.4最重要的新特性之一。属性钩子允许你在类的属性上定义get和set方法,就像其他语言的属性一样。比如:

class User {
    public string $name {
        get {
            return ucfirst($this->name);
        }
        set {
            $this->name = trim($value);
        }
    }
}

属性钩子让你可以在属性被读取或赋值的时候执行自定义逻辑,不用再写getter和setter方法了。代码更简洁,也更符合面向对象的封装原则。

第二,显式类字段初始化(Explicit Class Field Initialization)。PHP 8.4加入了一个新的语法,可以在类的字段声明时直接初始化,而且可以使用$this。比如:

class User {
    public string $name = "默认名";
    public DateTime $createdAt = new DateTime();
}

这个特性让类的字段初始化更灵活,不用再在构造函数里初始化了。

第三,新的数组函数。PHP 8.4加入了几个新的数组函数,比如arrayfind、arrayfindkey、arrayany、array_all等。这些函数让数组的操作更方便,不用再写循环了。比如:

$users = [...];
$admin = array_find($users, fn($user) => $user->role === 'admin');

第四,异步函数(Async Functions)的初步支持。PHP 8.4加入了异步函数的初步支持,虽然还不够完善,但已经可以用了。异步函数允许你在函数里用await关键字等待异步操作,不用再写回调函数了。这对于高并发的Web应用很有用。

第五,bcmath和gmp扩展的改进。PHP 8.4对bcmath和gmp扩展做了改进,支持了运算符重载,可以直接用+、-、*、/等运算符操作大整数,不用再调用函数了。

第六,弃用和移除。PHP 8.4弃用了一些旧的特性,比如隐式的null可空类型、某些内置函数的可选参数等。这些特性在未来的版本中会被移除,写代码的时候要注意避免使用。

这些新特性,让PHP 8.4变得更现代、更强大。学习的时候,要重点掌握属性钩子和新的数组函数,这些在日常开发中用得最多。

第四步:PHP 8.5的展望

PHP 8.5预计在2025年11月发布,目前还在开发中。根据已经通过的RFC和开发计划,8.5可能会加入以下特性:

第一,更完善的异步支持。PHP 8.5预计会在8.4的基础上,进一步完善异步函数的支持,包括异步生成器、异步迭代器等。这会让PHP的异步编程更成熟,更适合高并发的场景。

第二,更完善的类型系统。PHP 8.5预计会加入更多的类型特性,比如类型化的类常量、更精确的数组类型、泛型的初步支持等。泛型是PHP社区期待已久的特性,如果8.5能加入,会是一个很大的进步。

第三,性能优化。PHP 8.5预计会有更多的性能优化,包括JIT编译器的改进、内存使用的优化、内置函数的优化等。每一个PHP版本,性能都会有提升,8.5也不例外。

第四,更多的新语法。PHP 8.5预计会加入更多的新语法,比如更简洁的匿名类语法、更强大的匹配表达式、新的字符串函数等。

当然,这些都是基于目前的RFC和开发计划,最终8.5会有哪些特性,还要等正式发布的时候才知道。

学习PHP 8.5的时候,可以关注PHP的官方网站和RFC页面,了解最新的开发进展。也可以在8.5发布之前,先安装开发版本体验一下新特性。

第五步:学习框架

掌握了PHP的基础语法和新特性之后,就可以学习框架了。

PHP的框架很多,最流行的是Laravel和Symfony。对于新手,我推荐Laravel,因为它的文档好、社区活跃、上手快。

Laravel是目前最流行的PHP框架,它的特点是:

第一,优雅的语法。Laravel的语法非常优雅,写起来很舒服。比如路由、数据库查询、验证等,都有很简洁的API。

第二,功能全面。Laravel包含了Web开发需要的几乎所有功能,比如路由、中间件、控制器、模型、视图、验证、邮件、队列、缓存、认证、授权等。不用自己造轮子,专注业务逻辑就行。

第三,生态丰富。Laravel有丰富的生态,有官方的扩展包,比如Laravel Sanctum(API认证)、Laravel Socialite(第三方登录)、Laravel Horizon(队列管理)等。还有大量的第三方扩展包,用Composer就能安装。

第四,学习资源多。Laravel的文档非常好,而且是中文的。网上有大量的教程、视频、书籍,学习起来很方便。社区也很活跃,遇到问题很容易找到答案。

学习Laravel的路线:

第一,先学基础。包括路由、控制器、视图、Blade模板、数据库迁移、Eloquent ORM、验证、中间件等。这些是Laravel的基础,一定要掌握。

第二,再学进阶。包括认证、授权、邮件、队列、缓存、事件、监听器、服务容器、服务提供者、Facades等。这些是Laravel的进阶特性,掌握了之后能写出更专业的代码。

第三,做项目。学完基础和进阶之后,一定要做项目。可以做一个博客系统、一个电商网站、一个API服务等。做项目是最好的学习方式,能把学到的知识融会贯通。

除了Laravel,也可以了解一下Symfony。Symfony是一个更底层、更灵活的框架,很多其他框架(包括Laravel)都是基于Symfony的组件构建的。如果你想深入理解PHP框架的原理,或者需要更灵活的框架,可以学Symfony。

还有一些轻量级框架,比如Slim、Lumen等,适合做小型项目或者API服务。但对于新手,还是建议先学Laravel,等有了基础再了解其他框架。

第六步:学习开发工具

除了语言和框架,还要学习一些开发工具,提高开发效率。

第一,Composer。Composer是PHP的包管理工具,用来管理项目的依赖。一定要学会用Composer,包括安装扩展包、自动加载、版本管理等。现在的PHP项目,几乎都用Composer。

第二,IDE。推荐用PhpStorm,这是最好的PHP IDE,代码提示、重构、调试都很强。虽然是付费的,但很值得。如果不想付费,可以用VS Code,加上PHP相关的插件,也能满足基本需求。

第三,调试工具。Xdebug是PHP的调试工具,可以在IDE里设置断点,单步调试代码。一定要学会用Xdebug调试代码,比var_dump高效多了。

第四,测试工具。PHPUnit是PHP的单元测试框架,用来写单元测试。写测试是专业开发者的必备技能,一定要学会用PHPUnit写单元测试。还有Laravel Dusk,用来做浏览器测试。

第五,静态分析工具。Psalm和PHPStan是PHP的静态分析工具,可以在不运行代码的情况下,检查代码中的错误和潜在问题。用静态分析工具,能提高代码质量,减少bug。

第六,代码规范工具。PHP_CodeSniffer和PHP CS Fixer是代码规范工具,可以检查和自动修复代码格式。统一的代码规范,能让代码更易读、更易维护。

第七,版本控制。Git是必备的版本控制工具,一定要学会用。包括提交、分支、合并、变基、解决冲突等。

第八,Docker。Docker用来搭建开发环境,实现环境的一致性。学会用Docker,能避免"在我机器上能跑"的问题。

这些工具,能大大提高你的开发效率和代码质量。虽然学起来需要时间,但很值得。

第七步:最佳实践

掌握了语言、框架、工具之后,还要学习PHP的最佳实践,写出高质量的代码。

第一,遵循PSR规范。PSR是PHP Standards Recommendations,是PHP社区的代码规范。包括PSR-1(基础编码规范)、PSR-4(自动加载规范)、PSR-12(编码风格规范)等。遵循PSR规范,能让你的代码更规范、更易读。

第二,使用类型声明。PHP 7之后支持了类型声明,一定要用。包括参数类型、返回类型、属性类型。用类型声明,能让代码更安全,减少运行时错误,也让IDE的提示更准确。

第三,写注释和文档。好的代码需要好的注释。用PHPDoc写注释,说明类、方法、属性的用途和参数。好的注释,能让别人(包括未来的自己)更容易理解代码。

第四,写单元测试。单元测试能保证代码的质量,减少bug,也方便重构。专业的PHP项目,都有单元测试。从一开始就养成写测试的习惯。

第五,使用设计模式。设计模式是解决常见问题的最佳实践。比如单例模式、工厂模式、观察者模式、策略模式等。了解常用的设计模式,在合适的场景使用,能让你的代码更灵活、更易维护。

第六,关注安全。Web开发的安全很重要,要注意SQL注入、XSS、CSRF、文件上传漏洞等。用框架的话,框架已经帮你处理了大部分安全问题,但还是要了解安全原理,避免犯低级错误。

第七,性能优化。虽然PHP 8的性能已经很好了,但还是要注意性能优化。比如使用缓存、优化数据库查询、避免N+1问题、使用OPcache等。性能好的应用,用户体验更好,服务器成本更低。

第八,持续学习。PHP的生态发展很快,新的版本、新的框架、新的工具层出不穷。要保持学习的习惯,关注PHP的最新动态,不断提升自己。

这些最佳实践,是专业PHP开发者的必备素养。在学习的过程中,要慢慢养成这些习惯。

我的学习经验

最后,分享一下我自己学习PHP的经验和心得。

第一,多写代码。学习编程,最重要的就是多写代码。不要只看教程、只看书,要动手写。看十遍不如写一遍。从简单的小程序开始,慢慢写复杂的项目。写的代码多了,自然就熟练了。

第二,做项目。做项目是最好的学习方式。通过做项目,你能把学到的知识融会贯通,也能遇到各种实际问题,解决问题的过程就是成长的过程。可以从简单的项目开始,比如博客系统、待办事项应用,慢慢做复杂的项目,比如电商网站、SaaS应用。

第三,读源码。读优秀的开源项目的源码,是提升编程能力的好方法。比如Laravel的源码、Symfony的源码,都写得非常好。读源码,能学习到优秀的代码风格、设计模式、架构思想。刚开始读源码可能会觉得难,但坚持下去,会有很大收获。

第四,参与开源。如果有能力,可以参与开源项目,提交PR、修复bug、写文档。参与开源,能让你接触到更优秀的开发者,学习到更多东西,也能积累自己的技术影响力。

第五,写技术博客。写技术博客,是巩固知识的好方法。把你学到的东西、遇到的问题、解决的方案,写成博客。写博客的过程,就是梳理知识的过程。而且,博客还能帮到别人,积累个人品牌。

第六,不要害怕新版本。很多人害怕学新版本,觉得变化太大。但实际上,PHP的新版本都是向后兼容的,大部分旧代码都能直接跑。新版本加入的新特性,都是为了让开发更高效。不要害怕新版本,要主动学习新版本的特性,享受新版本带来的便利。

这些经验,是我多年PHP开发的心得。希望能给你一些启发。

写在最后

PHP是一门非常优秀的Web开发语言。它简单、易用、性能好、生态丰富,是Web开发的绝佳选择。从PHP 7到PHP 8,再到现在的8.4和即将到来的8.5,PHP一直在进步,越来越现代、越来越强大。

这篇文章,我分享了PHP 8.4和8.5的学习路线,以及我自己的入门经验。从环境搭建、基础语法,到新特性、框架、工具、最佳实践,希望能帮你建立一个完整的学习路径。

当然,学习编程是一个长期的过程,不是看一篇文章就能学会的。这篇文章只是一个路线图,具体的学习还需要你自己去实践、去探索。

如果你是PHP新手,不要害怕,PHP很容易上手。按照这个路线,一步一步学,很快就能入门。如果你已经有PHP基础,也可以看看这篇文章,查漏补缺,学习新版本的特性。

最后,用一句话来结束这篇文章:"PHP的世界很精彩,欢迎你的加入。"

愿你在PHP的学习道路上,越走越远,越走越好。