17611538698
webmaster@21cto.com

现代PHP是个什么样?

资讯 0 2220 2018-03-12 11:56:38
0.jpg

作者:FarazUsmani,来源:Wikipedia 

本文标题写的有点大,你觉得呢,我觉得是有点大。 虽然我用PHP已经若干年,我怎么能说这门语言的最佳实践与工具呢?我不能说,但我会继续用。
 
我看到开发者使用PHP开展工作的方式发生了本质的变化 ,不仅在语言上发生了巨变,新版本与新功能改进越来越成熟强大,而且整个生态系统也正在发生变化。
 
PHP社区正在创建新的工具,库、框架与文档,其定义的新模式使代码更加优雅,容易理解。很多人们都在想办法让工作更有效、干净和更有趣。
 
我得承认,我不是喜欢应用新趋势的人。实际上,当我采用新的工具时,且认为它会改善我的工作,然后确定有社区在背后支撑。接下我就会尝试按最佳实践编写我的代码。
 
正是因为如此,我花了一些时间开始使用Composer和PHPUnit。大概在一年前,或多或少地,循序渐进地,我开始为那些闪光的新事物敞开了心扉。
 
我开始喜欢新的工具产生,我暂时放下VIM,尝试使用新的IDE,我发现与XDebug集成的PHPStorm的工作流和体验很好。
 
一些库和好用的工具,PSR排在第一,然后是Composer,PHPUnit,Travis-ci乖让我惊叹不已。
 
什么是现代语言?
 

0_(1).jpg

 作者:KarenRoe,From Flickr
 
 网上有很多PHP相关的文章,但很多写的都非常糟糕。如果你不得不使用PHP开发,用网上粘贴的代码,丑陋的语法和老旧的代码,是无法做出想要的产品,也会让我们的生活变得也糟糕。
 
如果您仍然在遗留的代码上做开发,也许你的生活并不一定很美好。如果你在一个新项目上工作,并能够应用到所有的新工具,您将看到一个崭新的PHP。
 
PHP社区每天会反馈一些BUG,大多数是细节与我们的项目关系并不太大。但是我们不能不关注语言、社区和生态系统发生的变化,而且PHP社区也越来越成熟。在中国,你可以多关注鸟哥的博客。
 
我正在现在的公司开发一个内部API的SDK,就像做一个宠物项目一样,严格遵循技术最佳实践。虽然以前的日子里我也一直坚持在做,但是在某些事情我也需要做一些改变和调整。而这些变化就是我这段时间学到的内容,也就是本篇文章的主题,我称之为现代化的PHP。
 
从工作流程开始
 

0_(2).jpg

 TRIO FABRIKKER - 来源:https://nos.twnsnd.co
 
前面和大家说过,我是个IDE新手,但一见钟情。 PHPStorm是一款伟大的软件,它是我第一次用也是唯一用的IDE,我甚至不用再尝试其它的IDE软件。PHPStorm与XDebug的集成非常完美,支持PHP命名空间解析,artisan集成,Git集成,自动完成,代码生成与重构等特性。
 
当然,您不一定要使用IDE,这完全由个人喜好决定,可以使用任何称手的工具适合自己。比如还可以选择如VIM,Atom,Emacs,Bracket,Netbeans,Eclipse,UltraEdit,NotePad++等编辑 器。这里我想要说的,选编辑器的两个重点是生产力和人体工程学,IDE或文本编辑器要在这两处能帮助我们。
 
不过,对我来说,最重要的是调试工具集成。编写大小项目代码,都要拥有一个完善的调试器,它能让我们忘记var_dump和print_r。我们可以在运行时跟踪这些变量,分析堆栈状态,设置代码断点。这些让我们开发和重构更容易。
 
我不知道还有没有其它选择,XDebug能够让我们拥有这一切。你安装它了吗?如果还没开始做,请花一点时间来设置XDebug并把它集成到IDE或编辑器,使用正确的工作来调试代码。
 
另外需要提起您注意的工具是GitHub。我们的社区也有很多Git和GitHub相关的不少文章,还有帮助我们如何把代码放置在版本控制系统下。但是,我想告诉您还有另外一个缘由。
 
这个就是整合。我们还有一些工具应该与GitHub整合。这些工具可以生成各种数据指标,在运行测试、持续集成过程中为我们提供帮助。
 
依赖管理
 

0_(3).jpg

 
图为InstituoPasteur,拍摄于葡萄牙里斯本。
 
现代的PHP生态系统另一点是依赖管理,Composer是负责这个工作的好工具。
 
Composer已经有5岁了,在我看来,这几年才开始大规模采用。也许是我不是最早的使用者,也可能PHP开发者不愿意改变。
这个工具为代码包提供了一个前端,它由一个PHP库、项目和工具组成的PHP包项目库,源代码存储在Github或BitBucket等其它地方。
 
在这篇文章中我们讨论的所有库,也可能是您喜爱的项目,可以通过简单的方式添加到项目中。
 
# composer requirepackage_vendor/package_name
 
如果不知道软件包的作者,可以使用 search 来查找软件包并正确安装它。
 
# composer search package_name
 
用Composer完成这些工作,管理软件包依赖,它是一个非常好的工具。Composer还有很多有用的功能,值得我们花时间在安装完之好好阅读它的文档。
 
正确的命令行界面
 
我真的很喜欢使用CLI界面来快速尝试创意。对我来说,最大的REPL工具就是IPython,它能帮我自动完成代码,让我轻松定义函数,快捷访问文档和其它一些令人惊喜的功能。对PHP开发者来说,这个工具是Python的工作,而不是给PHP的。
 
在PHP的世界里,我们有一个叫“交互模式”的东西,可以在终端访问,只需要输入:
 
# php –a
Interactive shell
 
php >
 
这时候,我们就处在CLI交互模式中了,可以进行测试,但是PHP提供的这个工具有点不直观。我试了几次略觉不爽。我知道IPython能做挺多事,于是我暂时放弃使用它。
 
幸运的是,在PHP世界里,有一个很酷的新CLI界面,名字叫Psysh。Psysh是一个神奇的工具,有着和IPython一样有趣的功能,可以用Composer安装为全局或单个项目使用。
 
对我来讲,最好的Psysh功能是内置文档,想查一个PHP函数,不必去php.net,但是也需要做一些事情才能完全发挥作用。
 
安装完成后,输入以下命令即可工作。
 
apt-get install php7.1-sqlite3
mkdir /usr/local/share/psysh
wget http://psysh.org/manual/en/php_manual.sqlite-o /usr/local/share/psysh/php_manual.sqlite
 
如果您已经安装了Sqlite,第一行命令不是必须的,可以跳过。第二个命令用来创建psysh的工作目录,用来存储文档。这些都需要用root身份执行。
 
现在,您可以这么做:

0_(4).jpg

 
以上界面为psysh的文档界面,显示的是关于json_encode函数的使用方法
 
您应该开始测试
 
这是我每天都要对自己说的口头禅。像很多人一样,我不像TDD所说的那样复杂的测试。
 
我下一步要处理一个复杂的遗留项目,中间也进行一些测试,发现代码是如此脆弱和僵化,我想添加一些功能代码,会把原有的代码功能破坏。
 
推荐使用PHPUnit,正如官方网站所说的:
 
PHPUnit是面向程序员的面向PHP的测试框架。
它是单元测试框架的xUnit体系结构的一个实例。
 
PHPUnit是一个帮助你的项目在创建测试的框架,做整体的测试。它提供了一系列函数来测试代码的执行结果,并输入测试结果。
 
自从我开始考虑测试,阅读和与人沟通。我发现了另一个很棒的工具,它叫Behat,补充了我在统一测试中的其它工作,这是PHP领域中的BDD框架。
 
BDD(Behavior-Driven Development)是一个来自TDD(测试驱动开发)的开发过程。这些缩略词现在并不重要,重要的是可以使用更自然的语言来开始测试,这些并不是技术人员可以理解的语言。
 
这种语言被称为“Gherkin(小黄瓜)”,用来描述正测试的行为预期。使用小黄瓜的测试描述语言如下所示:
 

0_(5).jpg

 
 在这些行的后面有PHP代码,只要在PHPDoc中指定的行与正则表达式存在匹配,就会调用它。这段代码实现了这些步骤,以前当真正的用户调用你的SDK时会是什么现象。
 
Behat的工作流程非常流畅。当配置完成后,可以写所有可能的场景来测试一个功能。第一次运行Behat时,它会为您提供所有应添加到PHP上下文类中的方法模板,以实现场景中的每个步骤。
 
之后,开始写每步的实际代码,并不断重复这个循环。
 
1 实现PHP代码的第一步
2 运行测试
3 如果运行顺利,再不衫不履 一段PHP代码
4 如果有问题,修复
 
经过半小时的配置和阅读文档,你准备使用Behat,你会发现它包含了全部的PHP代码。
 
持续集成
 
持续集成(CI)是一个过程,这也是一种做事情的方式。对开发者来说,这个事情就是创建软件。
 
用简单的英语来说,就是将小块代码不断地合并到代码库中。代码已经过测试,并不会破坏任何东西。CI帮助我们的应用程序自动化的构建、测试和部署。
 
只需点击几下,就可以把GitHub项目与Travis CI集成在一起,并且每次推送到存储库,然后运行PHPUnit和Behat创建的测试,告诉我们已经实现最后一个功能,是否已准备好,是否合并。除此之外,可以使用Travis CI来把代码部署到生产机和测试机。
 
Travis CI可以帮我们完成一个工作流程,良好的开发过程。遵循这个良好的习惯,你会发现软件开发的过程多么有趣,而不仅仅是代码本身。
 
PSR-1与PSR-2
 
如果你不知道PSR是什么,你该去做个功课。实际上,PSR代表着PHP标准建议,由PHP-FIG(PHP Framework Interop Group)提出,PHP-FIG是由最大的PHP项目,框架和CMS组成的联盟,由他们来考虑语言、生态系统和未来要遵循的标准。
 
很长一段时间,PHP没有编码规范。我不是那么守旧,每次都看到某个人的项目或库用了不同风格的库。有时候括号和条件放在一起,有的被放在下一行,有的函数采用下划线,有的用了驼峰风格。如此等等的风络,几乎成了一个烂摊子。
 
PHP-FIG做了很多工作,也提出一个统一的代码风格。他们这样和开发者说:“不有再担心代码风格,让每个开发者都遵循同一个标准,一起创建优秀的软件”。这样,当我们看到每个人的代码,只需思考功能的完成和完善,而不用再指责格式和结构。
 
在本文正在写作之时,已经有9个PSR已接受的问题并提供了共同的解决方案。但是,如果你对这些标准一无所知,我们从PSR-1和PSR-2开始。
 
这些标准共同组成了现代的PHP编码风格。请确保在开始使用它们之前仔细阅读。不要以为在编码时你会记得所有这些,这需要一段过程,但是可以确定的是,有一些工具可以帮助到我们。
 
PHP CodeSniffer是个可以在Packageist上找得到的工具,可以用Composer来安装。我不认为代码仓库的名是最好的选择,是因为它包括两个不同的工具,分别是phpcs和phpcbf。
 
Phpcs是个代码嗅探器,它会扫描整个代码,寻找不符合编码标准的部分。我们可以使用phpcs几个编码标准,还可以创建自己的风格。当代码扫描结果后,phpcs会向我们展示一些不符合标准的代码段列表。
 
比如我们想让代码的错误信息。需要打开每个文件,修改代码,然后需要再次运行phpcs,查看错误是否显示,然后重该过程。这会比较无聊。
 
为了解决问题,PHP CodeSniffer提供了另外一个叫phpcbf的工具,这个工具另一名字叫PHP Code Beautifier。运行phpcbf,遵循相同的规则,并且为你修改相关的内容,能够在不破坏代码的情况做到最好。
 
框架
 
我不会发太多时间来讨论框架。有好的也有不好的,每个框架都有优点缺点。就个而言,我宁愿不用那些大框架。适合自己的需求够用就好。
 
比如你需要一个HTTP客户端,可以用Guzzle。如果需要模板引擎,就用Twig。如果需要一个路由,找到一个适合自己的需求,并且用好它。把这些组件粘合在一起就能创建好一个好的应用程序。
 
Symfony在这个概念做得很好。我们可以将整个框架用于一个项目,也可像引用库一样,随心所欲的调用它,就是这么容易。
 
然而,当我需要一个框架来编写应用程序时,我首先选择所谓的“微框架”。它们非常小巧,只提供基本的架构,易于定制,更容易让它们随着您的项目结构。
 
我选择的微框架是SlimFramework,我建议您可以阅读它的源代码,用它来做小型项目很简单,对于大型项目会复杂一些。
 
顺便说一句,对于那些刚刚刚开始编程的朋友来说,我认为,在用框架之前,您应该用自己的库来完成项目,尝试创建自己的框架。这会让你对整个PHP机制有所了解,且可以大大减少代码的开发。
 
现代PHP工具箱
 
下面我们用链接来完成本篇文章。对我自己来说,组件、工具和库代表了很多现代PHP的功能:
 
Slimframework 一个非常不错和微框架
Symfony – 一个大型框架,有不少强大的可重用组件,类似的框架如Laravel是在它的基础上发展起来的。
Guzzle – 一个简单易的HTTP客户端
PHPUnit – 一个用于整体测试的开发框架。Facebook也在用。
Behat – 事件驱动的开发框架
PHPCS/CBF – 代码嗅探器和代码美化器
Faker – 数据生成器
Psysh – 一个开发者命令控制台(CLI),有着强大的功能
Composer – 依赖管理和其它有用的功能
Packagist – 包存储库
Twig – 模板引擎
 
本文的标题起的有点大,或许还有点自以为是:) 但我真正想给大家展示的是,PHP正在发展,生态系统也在以同样的速度(也许更快)地发展。
 
 

作者:Felipe Lope
标题:This is what modern PHP looks like
编译:21CTO社区 – Raymond
原文:https://medium.freecodecamp.org/this-is-what-modern-php-looks-like-769192a1320


评论