tangzhoou0 2019-02-20
【CSDN 编者按】PHP 是最好的编程语言?本文的作者有话说。之前为了改进旧程序,实现更好的性能、更轻松的部署和更高的测试覆盖率,Danny van Kooten 选择从 PHP 切换部署到 Go 应用程序。但是万万没想到,在使用了 Go 两年之后,Danny 又将应用程序转回 PHP 了......个中原因何在,本文中一探究竟。
作者 | Danny van Kooten,Web 开发者,ibericode 创始人,WordPress 插件 MailChimp、HTML Forms、Boxzilla 的作者。
译者 | 弯月
责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
以下为译文:
还记得我放弃Laravel转而使用Golang吗(https://dannyvankooten.com/laravel-to-golang/)?嗯,在使用了Go两年之后,我们的应用程序又转回PHP了。
为什么?!你已经说过PHP可能是个很糟糕的决定,但现在又要在上面花更多的时间?......嗯,实际上有好几个原因。
PHP的改进
过去三年PHP改进了许多:
Symfony4改变了世界
我很喜欢Symfony的兼容性承诺(https://symfony.com/doc/current/contributing/code/bc.html)以及他们13年来为之做出的努力。
所以,当Symfony4(https://symfony.com/4)发布,我听到了这些好消息,就去尝试了一下,用它实现了一个小的应用程序。
结论是:太棒了,真的太棒了。
Symfony4在简化安装上花费了许多心思,启动一个Symfony应用程序可以更方便快捷,需要的配置工作更少。现在它已经赶超了Laravel的快速开发,同时它还鼓励许多很不错的开发实践,避免开发时落入自己的陷阱。而且它的性能非常好(http://www.phpbenchmarks.com/en/)。
将旧的Lavarel应用程序移植到Symfony很容易,只需要重新实现一些用Go写的功能,恢复之前做的一些便捷方式(大多数是由于Laravel的全局辅助功能导致的)即可。
一个非常好的意外收获是我可以很大程度上提高开发中的测试覆盖率。两遍甚至三遍地反复编写同一个应用程序让我对其非常熟悉。
Symfony的调试工具栏也非常棒。它能显示从请求到响应过程中发生的一切,显示出一切警告和不推荐使用的警告,还有内置的性能工具,可以很容易地对代码进行性能测试。
在学习了Symfony的Form组件(https://symfony.com/doc/current/forms.html)之后,我深深地爱上了它。设计一个可访问、可重用的表单变得极其容易,还能在提交时验证表单内容,并且安全地根据表单数据填充PHP对象。
$user = $this->getUser(); $form = $this->createForm(UserBillingInfoType::class, $user) ->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // $user is already populated with the form values at this point // it's valid, so we can update the database and redirect the user now }
另一个改进我们的应用程序的软件是Doctrine。模型(实体)是普通的PHP类,关系(关联)是普通的引用,使得逻辑测试非常容易,无需再考虑数据库实现。
$user = new User(); $user->addLicense(new License()); $manager->persist($user); // both user and its license will be saved
在Doctrine中,默认所有操作都包裹在SQL事务中。在我看来这一点非常重要,它保证了原子性。而在Eloquent中实现这一点需要大量工作。
Go依然很强大
实话实说,Go非常优秀。它非常简单,能实现PHP绝无可能达到的性能。如果我们需要小型的API或需要高吞吐量的功能,我依然会选择Go。
但我们的工作室需要大量的服务器端渲染的东西。尽管Go可以做到这一点(过去两年已经证明了),但使用PHP实现会更容易维护。
做出正确的业务决策
还有一个没说的原因是,在过去几年,有好几家公司联系我,希望收购我们的一个产品。
但在听说我们的技术使用的是Golang时,他们感到有点惊讶。他们告诉我,他们更希望使用PHP,因为我们大部分产品使用的都是PHP。这一点我没法责备他们。
原文:https://dannyvankooten.com/from-go-back-to-php-again/
本文为 CSDN 翻译,如需转载,请注明来源出处。
<?php. if (!empty($_POST)) {. $data1 = $_POST["data1"];$data2 = $_POST["data2"];$fuhao = $_POST["fuh