当前位置: 首页 > 后端技术 > PHP

看吧,这就是现代化 PHP 该有的样子

时间:2023-03-30 03:28:25 PHP

看,这就是现代PHP应该的样子这篇文章的标题很自命不凡,不是吗?是的,我们已经使用PHP多年,但我们能说出什么是最佳实践和最佳工具吗?我做不到,但我会去做。我看到开发人员使用PHP的方式发生了真正的变化,不仅因为新版本的PHP及其逐步完善,PHP语言发生了巨大的变化,变得更加成熟和健壮,更重要的是,整个生态系统也不断变化。为了使代码更加优雅和易于理解,创建了新的工具、库、框架和文章,并定义了新的设计模式。有些人仍在思考如何让工作(和开发人员的生活)更有效率、更简洁、更有趣。我不是新趋势的早期追随者,事实上,我只在新工具拥有社区后才使用它,我认为它会改进我的工作。我经常做的就是尝试使用最佳实践编写代码。因此,我花了一段时间才开始使用像Composer和PHPUnit这样的工具。大约一年前,我开始接触这些闪亮的新事物。首先是PSR,然后是Composer、PHPUnit、Travis-ci和其他几个库和令人惊叹的工具。我什至开始使用IDE(VimFTW,但带有XDebug的PHPStorm是一个明智的工作环境)!什么是现代化?作者:KarenRoe(Flickr)[CCBY2.0(http://creativecommons.org/li...)]网络上有大量关于PHP有多糟糕、使用PHP工作会让你的生活变得多么糟糕的文章,以及语言如何丑陋以及您能想到的任何其他内容!如果您打算使用遗留代码,也许您的生活不会很美好,但如果您有机会从事一个新项目并获得所有新工具的访问权限,那么您将看到这个新的PHP我要谈的。我每天都用PHP解决一些问题,但人们无法关注语言、社区和生态系统发生的变化。还有很长的路要走,但是PHP领域的事情正在成熟。我开始为我工作的公司(例如宠物项目)的内部API创建一个SDK,并决定遵循最佳实践。大多数事件我已经在做,但我在做一些事情时做了一些改变。这些变化和我在去年学到的东西是本文的主题,我称之为现代PHP。让我们从工作流程开始吧正如我所说,我是IDE的新手,但是自从我使用了IDE之后,我就爱上了它。PHPStorm是软件界的顶级杰作。从那以后,这将是我的第一个也是唯一一个IDE。这是我的第一次尝试,效果非常好,我不必再尝试其他IDE。集成的XDebug非常完美,还有PHP命名空间解析、composer、git、代码自动完成、代码生成和代码重构。且说三天三夜,无穷无尽。我不认为你必须使用IDE,实际上,这都是个人意见。您需要使用诸如Vim、Atom、Emacs、Bracket、NetBeans、PHPStorm、Eclipse等适合您需要的东西。两个非常重要的点是生产力和人体工程学。您的IDE或文本编辑器必须协助您的工作,而不是拖累您。然而,对我来说最重要的是调试功能的集成。写一个大项目(其实小项目也是如此)你需要一个好的调试工具。让我们忘掉那些var_dump和print_r。您需要在代码运行时设置变量的值,分析堆栈并设置断点。这些是使开发和重构更容易的关键。我什至不知道是否还有其他选择,XDebug拥有您需要的一切。你现在有时间吗?如果您还没有完成这些操作,请花点时间安装XDebug并将其集成到您的IDE中。立即开始使用正确的工具来调试您的代码。我想提请您注意的另一个工具是Github。关于Git和Github有多棒,以及为什么你必须开始使用版本控制来管理你的代码,可以写一整篇文章,但在这里我想告诉你另一个原因。这里的重点是集成(GitHubIntegration,译者注)。Github中集成了其他几个工具,您应该开始使用它们。在持续集成过程中,这些工具可以为您生成数据、运行测试、运行任务,并在您的工作流中为您做各种事情。集成是开始使用Github的一个很好的理由,现在可以暂时搁置其他一切。依赖管理现代PHP生态系统的另一个方面是依赖管理,Composer就是由此诞生的。Composer已经5岁了,但是大规模应用还有将近两年的时间。这可能是因为我没有及早使用它,或者大多数PHP开发人员都在维持现状。它是Packagist的终端,Packagist是一个PHP包的仓库,由PHP库、项目和工具组成,源码存放在Github(或BitBucket等)。本文中提到的所有第三方库都可以轻松添加到您的项目中。$composerrequirepackage_vendor/package_name如果你不知道第三方库的名称,你可以使用搜索来查找它。$composersearchpackage_nameComposer非常适合管理依赖项,但它远不止于此。花时间安装Composer并阅读它的文档。CommandLineInterfaceHandledWell我真的很乐意尝试快速使用CLI界面的想法。对我来说,最好的REPL工具是IPython。该工具会自动完成您的代码,让您轻松定义函数,在闲暇时访问文档,以及许多其他令人惊叹的功能。对我们不利的是,该工具适用于Python而不是PHP。在PHP世界中有一种叫做“交互模式”的东西,可以通过终端工具访问,只需输入以下代码:一些事情。这种模式有效,但它太不直观了。我努力尝试了几次,但了解IPython的能力让我完全没有继续使用这种模式。幸运的是,有一个很酷的新CLI(命令行界面)工具,叫做Psysh。Psysh是一个了不起的工具,充满了引人注目的功能,可以全局安装或使用composer按项目安装。对我来说,Psysh的最佳特性是嵌入式文档功能。不用上php.net网站,直接查询一个PHP函数的文档,真是太好了。缺点是您必须做一些事情才能享受所有功能。工具安装完成后,输入如下命令即可正确运行(我这里使用的是Debian,不一定适合所有人):$apt-getinstallphp7.1-sqlite3$mkdir/usr/local/share/psysh$wget-o/usr/local/share/psysh/php_manual.sqlite第一个命令不是强制性的,如果你已经安装了Sqlite你可以跳过这一步.第二条命令创建用于存储文档的目录,第三条命令下载文档并将其保存到先前创建的目录中。请记住,所有这些命令都必须以root身份运行。现在你有这个:显示有关json_decode信息的psysh命令文档的屏幕截图。点击此链接到Psysh以了解有关此出色工具的更多信息。你应该开始测试这是我每天对自己说的口头禅。像许多人一样,我没有按照TDD的建议测试我的代码。我现在已经养成了测试的习惯,已经做了半年了,但还有很长的路要走。当我面对一个复杂的遗留项目时,我决定学习测试。那个项目中的代码太奇怪了,每次我添加一些东西它都会崩溃。有新功能吗?实现功能,制造问题!修复错误?或者创建一个新的。这是一个大问题,我在另一个帖子上,是我开始尝试使用测试。我要推荐的第一个工具是PHPUnit。如官网所示:PHPUnitisaPHPtestingframeworkforprogrammersPHPUnitisaunittestingframeworkforthexUnitarchitecture所以,PHPUnit是一个为你的项目生成统一测试的框架,它会提供一些功能来测试你的代码还有是漂亮的结果输出。自从我开始考虑测试、阅读和与人们讨论它以来,我发现了另一个很棒的工具,可以补充你在这些统一测试上的工作。它是Behat,一个用于PHP的BDD框架。BDD(BehaviorDrivenDevelopment)是从TDD(TestDrivenDevelopment)衍生出来的一种开发过程。这些首字母缩略词现在并不重要,重要的是您可以用一种更自然的语言来指定您的测试,一种非技术人员可以理解的语言。这种语言称为Gherkin,用于描述正在测试的预期行为,使用Gherkin的测试描述,它看起来像这样:在这些行之后是PHP代码,仅在PhpDoc中指定的方法行和常规行之间expression如果匹配,则调用代码。代码通过您的SDK、应用程序或Web系统实现这些步骤,真正的用户会做什么Behat的工作流程很流畅。正确配置所有内容后,您可以开始编写测试功能的所有可能场景。当您第一次运行Behat时,它会为您提供所有应添加到PHPContext类以实现场景中每个步骤的方法模板。之后,您可以为每个步骤编写实际代码并重复循环。为每个步骤编写PHP代码运行测试如果一切正常,为其他步骤编写PHP代码如果有问题,修复它经过半小时的配置和阅读文档,你可以准备使用Behat,最后你会发现它全是PHP代码,并且发现您已经知道如何使用它进行编程。持续集成持续集成(CI)是为软件工程师提供创建软件的方法的过程。简单来说,就是频繁(可能一天几次)将小块代码集成到基础代码中的行为。代码已经过测试,没有破解。CI帮助我们自动构建、测试和部署我们的应用程序。只需点击几下,即可将您的Github项目集成到TravisCI中。每次您将代码推送到存储库时,它都会运行您创建的PHPUnit和Behat文件,并告诉您最新的功能是否准备就绪,或无,或将被合并。除此之外,您还可以使用TravisCI部署代码以在生产环境中运行。拥有一个定义明确的工作流真是太好了,TravisCI帮助我们实现了这一点。阅读此入门指南,了解软件开发过程比代码本身有趣得多。关注PSR-1和PSR-2如果您听说过PSR,那么您现在应该知道了。PSR其实是PHPStandardRecommendations的缩写,由PHP-FIG(PHPFrameworkInteropGroup)发起。PHP-FIG是由一些大型PHP项目、框架和CMS的成员组成的组织。它旨在思考语言的未来和生态,并讨论语言应遵循的标准。很长一段时间,PHP没有编码风格。我没那么老,但每次我看别人的项目或库时,他们都使用不同的编码风格。花括号有时在这个位置,有时在下一行,处理长行有几种方法。各种编码风格和偏好混杂在一起,弄得一团糟。PHP-FIG做了很多工作。通过推出统一的编码标准,他们似乎在说:“别再担心编码风格,让我们都遵循一个标准,然后专注于制作好的软件。”.现在,每当你想读别人的代码时,你只需要关心代码是如何工作的,而不必去指责他的代码风格和结构。截至本文发表,已推出9个共识PSR标准,针对常见问题提供通用解决方案。如果您还不知道这些标准,请从PSR-1和PSR-2开始。这些标准提出了现代PHP编码风格,确保您阅读并开始使用它们。不要以为你在写代码的时候就可以把它们都想好,这是一个漫长的过程,但是你应该知道有一些工具可以帮助你使用和记住它们。PHPCodeSniffer是一种您可以在Packagist上找到并使用Composer安装的工具。我认为这个库的名字并不理想,因为它实际上由两个工具组成,phpcs和phpcbf。Phpcs用于代码风格检测。它会全面扫描你的代码,找出那些不符合配置的编码标准的部分。您可以使用phpcs中许多内置的编码标准,也可以自定义编码标准。在扫描结束时,它会为您提供不符合编码标准的代码片段列表,这很棒。那么,我们该如何纠正错误呢?您可以打开每个文件,更改代码,运行phpcs查看是否有任何错误,然后重复该过程。很无聊。为了解决这个问题,PHPCodeSniffer提供了另一个工具,叫做phpcbf或者PHPCodeBeautifier。在同一套编码标准设置下,运行phpcbf,它会尽最大努力为您纠正所有错误,而不会破坏您的代码。尝试养成在代码提交之前运行phpcs和phpcbf的习惯,这将确保你所有的代码都符合编码标准,如果有人喜欢你的工具(或项目)并想贡献代码,他们会阅读你的代码会有没有障碍。框架我不会花太多时间讨论框架,已经有一些不错的框架,不管流行与否。就个人而言,我不喜欢使用内置所有内容的重型框架,我的想法是您只需选择您需要的那个。如果需要HTTP客户端,可以使用Guzzle。如果你需要使用模板引擎,那么你可以使用Twig。如果你需要路由,只要找到满足你需求的组件并使用它即可。组装这些组件以创建您自己的应用程序。Symfony框架在这方面做得很好。您可以为您的项目使用整个框架,或者只选择并使用您想要使用的部分。就这么简单。然而,每当我想为一个应用程序使用一个框架时,我总是选择那些被称为微框架的框架之一。它们非常轻巧,仅提供基本功能,易于定制,并且可以轻松适应您的项目架构。我选择的微框架是Slimframework,我认为您应该阅读它。对于小型项目,它非常简单,但对于大型项目,使用起来有点复杂。顺便说一句,对于即将编程的人来说,我真的觉得在你选择一个框架并打算永远使用它之前,你应该开始创建自己的框架。这将使您了解框架的工作原理并更快地适应更大的框架。现代PHP工具包让我们用工具包列表来结束本文。对我来说,这些组件、工具和库描绘了现代PHP的样子:易于发起HTTP请求PHPUnit:测试框架Behat:行为驱动测试框架PHPCS/CBF:代码规范,美化工具Faker:生成测试数据的库Psysh:充满惊喜的交互控制台Composer:依赖管理,并且有许多其他有用的功能Packagist:PHPPackageRepositoryTwig:TemplateEngine我知道,这篇文章的标题真的有点狂妄。其实我想说的是PHP在进化,PHP生态系统也在以同样(也许更快)的速度前进。讨论请前往:https://laravel-china.org/top...