《Modern PHP》读书笔记
这本书适合你吗?
我认为每个有一定PHP开发经验的人都应该读读这本书,因为正如书中的前言所说:
“网上有成千上万的PHP教程,其中大多数都已经过时了,展示的是陈旧的实践方式。可是,谷歌的搜索结果给出的仍然是这些教程。过时的信息对马虎的PHP程序员是危险的。他们在不知不觉中就会创建速度慢,且不安全的PHP应用。”
这本书对现代PHP开发的正确实践做了系统的梳理。对于开发者而言,只要跟着目录,掌握目录提到的每一部分,功力就能大有长进。不论看不看此书,光看目录就很有收获。
这反过来也说明这本书涉及面很广,目录中的每个大章单独来个上百页其实都不算多。因此这本200多页的书,只能够做到对每部分提了下重点,指引个方向,并不会深入浅出地教读者去掌握这些知识,读者还是需要阅读各种额外的材料。比如谈到布署时,就一定会谈到nginx,php-fpm和系统管理,虽然这是本PHP的书,但是这些知识也是必要的。
这样的书,适合有丰富经验的PHP开发者,书中每一章的知识基本都掌握了,阅读起来轻松愉悦。对于PHP新手而言,缺了太多预备知识,想完整地读下去其实是很困难的,看看目录就好了。
现代PHP为什么重要?
3年前,我刚转做WEB开发,用PHP做了几个小网站、公众号和WEB APP以后,对PHP的印象可以用4个字形容——累觉不爱。
从手动引入自己写的代码文件,到引用产品的某个函数,到记录日志,到缓存数据,到发邮件不卡住,每换一个产品,这些基础的问题都要重新解决一遍,重复开发基础的功能(比如日志),重复写机械的代码让我实在很崩溃。
在我的观念里,软件开发不应该这样的,应用层面的软件开发发展到今天,开发者应该可以做到将注意力集中在在业务问题上,而不是再陷入语言特性和基础设施上。有一段时间我很矛盾,是否该考虑转向JAVA、Python、Node试试了。
现代PHP的出现,结束了这个矛盾的过程,那些前面令人饱受煎熬的问题,都得到了解决。
包管理、自动加载,PSR标准,以及日志、缓存、队列、命令行作为基础设施的组件,使得这个古老的语言脱胎换骨。在有了这些现代化特征后,我才第一次感觉到自己是在关注业务,而不用像之前为了让发送邮件不卡住而专门写一个简易队列。
因此,现代PHP之所以重要,就在于它将你从重复劳动中解放出来,将注意力更多地集中在具体的业务上。
现代PHP到底现代在哪里?
我认为现代是体现在2个方面:
1.开发:关注业务;
2.工程管理:测试、部署、分析都有标准化的工具;
开发:关注业务
在前面“现代PHP为什么重要”其实对这个问题已经有了一定的探讨。现代PHP的包管理、自动加载、PSR标准,以及日志、缓存、队列等各种组件,都是为了让开发者可以将注意力集中在解决业务问题上。
没有这些现代化特征,实际开发最容易碰到的问题就是重复开发基础功能。比如写日志时,发现没接口,于是自己实现一套简易的;发邮件不想阻塞请求,于是自己写了一个简易队列。花在写基础设施的时间比花在解决具体业务的时间都多。而且还不稳定。
工程管理:测试、部署、分析都有标准化的工具
“在过去,常见的做法是编写一个PHP文件,使用FTP上传到生产服务器,然后祈祷它能正常运行。这种开发策略非常可怕,但又必须这么做,因为当时没有可用的本地开发环境。”
WEB开发是个工程管理问题比技术问题多的领域,沿用上述的这种工程管理策略,能把自己玩吐血。我们现在都要求采用git做代码管理,在代码推送完成后通过CI/CD自动完成测试和布署。如果布署有问题,则要立刻回滚。而在性能分析上,则通过xhprof或者new relic这样的工具去分析并改进。
这些工程管理方式,在以往实施代价可能很高,但是在现代却成了每个项目的标配。