现代PHP是个什么样?

2018-04-20 10:14 阅读次数:来源:php开发电脑编程 新闻作者:php程序员培训

 

 


       

  本文标题写的有点大,你觉得呢,我觉得是有点大。 虽然我用PHP已经若干年,我怎么能说这门语言的最佳实践与工具呢?我不能说,但我会继续用。

  我看到开发者使用PHP开展工作的方式发生了本质的变化 ,不仅在语言上发生了巨变,新版本与新功能改进越来越成熟强大,而且整个生态系统也正在发生变化。

  PHP社区正在创建新的工具,库、框架与文档,其定义的新模式使代码更加优雅,容易理解。很多人们都在想办法让工作更有效、干净和更有趣。

  我得承认,我不是喜欢应用新趋势的人。实际上,当我采用新的工具时,且认为它会改善我的工作,然后确定有社区在背后支撑。接下我就会尝试按最佳实践编写我的代码。

  正是因为如此,我花了一些时间开始使用Composer和PHPUnit。大概在一年前,或多或少地,循序渐进地,我开始为那些闪光的新事物敞开了心扉。

  我开始喜欢新的工具产生,我暂时放下VIM,尝试使用新的IDE,我发现与XDebug集成的PHPStorm的工作流和体验很好。

  一些库和好用的工具,PSR排在第一,然后是Composer,PHPUnit,Travis-ci乖让我惊叹不已。

  网上有很多PHP相关的文章,但很多写的都非常糟糕。如果你不得不使用PHP开发,用网上粘贴的代码,丑陋的语法和老旧的代码,是无法做出想要的产品,也会让我们的生活变得也糟糕。

  如果您仍然在遗留的代码上做开发,也许你的生活并不一定很美好。如果你在一个新项目上工作,并能够应用到所有的新工具,您将看到一个崭新的PHP。

  PHP社区每天会反馈一些BUG,大多数是细节与我们的项目关系并不太大。但是我们不能不关注语言、社区和生态系统发生的变化,而且PHP社区也越来越成熟。在中国,你可以多关注鸟哥的博客。

  我正在现在的公司开发一个内部API的SDK,就像做一个宠物项目一样,严格遵循技术最佳实践。虽然以前的日子里我也一直坚持在做,但是在某些事情我也需要做一些改变和调整。而这些变化就是我这段时间学到的内容,也就是本篇文章的主题,我称之为现代化的PHP。

  前面和大家说过,我是个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整合。这些工具可以生成各种数据指标,在运行测试、持续集成过程中为我们提供帮助。

  现代的PHP生态系统另一点是依赖管理,Composer是负责这个工作的好工具。

  Composer已经有5岁了,在我看来,这几年才开始大规模采用。也许是我不是最早的使用者,也可能PHP开发者不愿意改变。

  这个工具为代码包提供了一个前端,它由一个PHP库、项目和工具组成的PHP包项目库,源代码存储在Github或BitBucket等其它地方。

  在这篇文章中我们讨论的所有库,也可能是您喜爱的项目,可以通过简单的方式添加到项目中。

  如果不知道软件包的作者,可以使用 search 来查找软件包并正确安装它。

  用Composer完成这些工作,管理软件包依赖,它是一个非常好的工具。Composer还有很多有用的功能,值得我们花时间在安装完之好好阅读它的文档。

  我真的很喜欢使用CLI界面来快速尝试创意。对我来说,最大的REPL工具就是IPython,它能帮我自动完成代码,让我轻松定义函数,快捷访问文档和其它一些令人惊喜的功能。对PHP开发者来说,这个工具是Python的工作,而不是给PHP的。

  在PHP的世界里,我们有一个叫“交互模式”的东西,可以在终端访问,只需要输入:

  这时候,我们就处在CLI交互模式中了,可以进行测试,但是PHP提供的这个工具有点不直观。我试了几次略觉不爽。我知道IPython能做挺多事,于是我暂时放弃使用它。

  幸运的是,在PHP世界里,有一个很酷的新CLI界面,名字叫Psysh。Psysh是一个神奇的工具,有着和IPython一样有趣的功能,可以用Composer安装为全局或单个项目使用。

  对我来讲,最好的Psysh功能是内置文档,想查一个PHP函数,不必去但是也需要做一些事情才能完全发挥作用。

  如果您已经安装了Sqlite,第一行命令不是必须的,可以跳过。第二个命令用来创建psysh的工作目录,用来存储文档。这些都需要用root身份执行。

  以上界面为psysh的文档界面,显示的是关于json_encode函数的使用方法

  这是我每天都要对自己说的口头禅。像很多人一样,我不像TDD所说的那样复杂的测试。

  我下一步要处理一个复杂的遗留项目,中间也进行一些测试,发现代码是如此脆弱和僵化,我想添加一些功能代码,会把原有的代码功能破坏。

  PHPUnit是一个帮助你的项目在创建测试的框架,做整体的测试。它提供了一系列函数来测试代码的执行结果,并输入测试结果。

  自从我开始考虑测试,阅读和与人沟通。我发现了另一个很棒的工具,它叫Behat,补充了我在统一测试中的其它工作,这是PHP领域中的BDD框架。

  BDD(Behavior-Driven Development)是一个来自TDD(测试驱动开发)的开发过程。这些缩略词现在并不重要,重要的是可以使用更自然的语言来开始测试,这些并不是技术人员可以理解的语言。

  这种语言被称为“Gherkin(小黄瓜)”,用来描述正测试的行为预期。使用小黄瓜的测试描述语言如下所示:

  在这些行的后面有PHP代码,只要在PHPDoc中指定的行与正则表达式存在匹配,就会调用它。这段代码实现了这些步骤,以前当真正的用户调用你的SDK时会是什么现象。

  Behat的工作流程非常流畅。当配置完成后,可以写所有可能的场景来测试一个功能。第一次运行Behat时,它会为您提供所有应添加到PHP上下文类中的方法模板,以实现场景中的每个步骤。

  经过半小时的配置和阅读文档,你准备使用Behat,你会发现它包含了全部的PHP代码。

  持续集成(CI)是一个过程,这也是一种做事情的方式。对开发者来说,这个事情就是创建软件。

  用简单的英语来说,就是将小块代码不断地合并到代码库中。代码已经过测试,并不会破坏任何东西。CI帮助我们的应用程序自动化的构建、测试和部署。

  只需点击几下,就可以把GitHub项目与Travis CI集成在一起,并且每次推送到存储库,然后运行PHPUnit和Behat创建的测试,告诉我们已经实现最后一个功能,是否已准备好,是否合并。除此之外,可以使用Travis CI来把代码部署到生产机和测试机。

  Travis CI可以帮我们完成一个工作流程,良好的开发过程。遵循这个良好的习惯,你会发现软件开发的过程多么有趣,而不仅仅是代码本身。

  如果你不知道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的功能:

  Symfony – 一个大型框架,有不少强大的可重用组件,类似的框架如Laravel是在它的基础上发展起来的。

  PHPUnit – 一个用于整体测试的开发框架。Facebook也在用。

  本文的标题起的有点大,或许还有点自以为是:) 但我真正想给大家展示的是,PHP正在发展,生态系统也在以同样的速度(也许更快)地发展。

 




友情链接: 壹诺网站优化 山东威海凤凰湖 贵阳幼师学校 威海石岛楼盘 公务员考试 凤凰湖官网 威海银滩海景房 防爆板