现代的PHP较少使用庞大的框架,而是更多的使用具有互操作性的专门组件制定解决方案。开发新PHP应用时,我很少直接的使用Laravel或Symfony,而是思考能把哪些现有的PHP组件结合在一起解决我的问题。
为什么使用组件
对很多PHP程序员来说,现代的PHP组件是个陌生的概念。我也是在几年前才知道。在没有深入理解组件之前,本能驱使我使用巨型框架(列如Symfony或CodeIgniter)开发PHP应用,我从不会考虑其他途径。以前我会花时间研究某个框架的封闭生态系统,使用这个框架提供的工具。如果不幸,框架没有提供我所需的功能,我会自己开发。大型框架也很难集成自定义的库或第三方库,因为这些库之间没有使用相同的接口。现在你可以放心,这样的日子一去不复返了,我们不用再感激庞大的框架,也不用束缚在这些框架筑起的围墙中了。
如今,开发应用时,我们会从不断增多的大量专用组件中选择合适的。既然已经有了guzzlehttp/guzzle组件,为什么还要浪费时间自己编写处理HTTP请求和响应库呢?既然league/route和arua/router组件很好用,为什么还要重新创建路由呢?你应该明白我想要表达的意思了。其他开发者花了无数的时间创建、优化和测试专门的组件,以便让组件尽量做好一件事。如果响快速开发更好的应用,不使用这些组件而自己重新发明轮子的话,那就太傻了(除了个人研究)
组件是什么
严格来说,PHP组件是一系列相关的类、接口组件是打包的代码,用于帮你解决PHP应用中某个具体的问题。例如,如果你的PHP应用要收发HTTP请求,可以使用现成的组件;如果你的应用要解析逗号分隔的数据,可以使用现成的组件实现。我们使用组件为的是不重新实现已经实现的功能,把更多的时间用在项目的长远目标上。
任何市场中的产品都有好坏之分,PHP组件也是如此。就像在杂货店检查苹果一样,区分PHP组件的好坏也有一些技巧。
组件特点
- 作用单一
PHP组件作用单一,能很好的解决一个问题。组件不是万能的,不能杂而不精,要术业有专攻。组件专注于解决一个问题,而且使用简单的接口封装功能。 - 小型
PHP组件小巧玲珑,只包含解决某个问题所需的最少代码。组件中的代码量各异。一个PHP组件可以只有一个PHP类,也可以有多个PHP类,分别放在不同的子命名空间中。PHP组件中类的数量没有统一限制,根据解决问题的需要,想使用多少个就使用多少个。 - 合作
PHP组件之间能良好合作。毕竟组件就是为了和其他组件合作,解决更复杂的问题。PHP组件不会让自己的代码搅乱全局命名空间,而会把代码放在自己的命名空间中,防止与其他组件有名称冲突。 - 测试良好
PHP组件测试良好。因为体型小,因此很容易测试。如果PHP组件体型小,而且作用单一,很可能也易于测试,因为组件关注的东西少,而且依赖易于识别和模拟。最好的PHP组件本身会提供测试,而且有充足的测试覆盖度。 - 文档完善
PHP组件的文档完善。组件应该能让开发者轻易安装、理解和使用。好的文档可以做到这一点。PHP组件应该有个README文件,说明组件的作用,如何安装以及如何使用。还可以为组件搭建网站,放上更详细的信息。PHP组件的源码也应该有文档,为组件中的类、方法和属性添加行内文档快,说明参数、返回值和可能抛出的异常。
组件推荐
HTTP请求
- Guzzle- 一个完整的HTTP客户端
- PHP VCR- 一个录制和回放HTTP请求的库
- php-curl-class- PHP的Curl类