vlambda博客
学习文章列表

阔别两年,我又从 Go 转回了 PHP

本文经授权转载自CSDN (ID: CSDNnews)

整理 | 局长

为保狗命,先事先声明,本文无意引战,纯粹是想分享一个从 PHP 转到 Go,又再从 Go 转回 PHP 的案例。看看这位开发者是基于怎样的考虑,以及又是在怎样的场景下,做出了这样的一个决定。

原文作者 Danny van Kooten 是一名 Web 开发者,也是 WordPress 插件 MailChimp、HTML Forms、Boxzilla 的作者。不难发现,Danny 是一名擅长 PHP 的程序员。

为了改进旧程序,实现更好的性能、更轻松地部署以及提升测试覆盖率Danny 选择从 PHP 切换到 Go 开发 Web 应用程序。但没想到的是,在使用了 Go 两年之后,Danny 又重新回到了 PHP 的怀抱......个中原因何在,不妨继续阅读。

以下为译文

还记得我放弃 Laravel 转而使用 Golang 的经历吗?
(https://dannyvankooten.com/laravel-to-golang/)

嗯,在使用了 Go 两年之后,我们的 Web 应用程序又重新转回使用 PHP 开发了。

觉得我在打自己的脸是吗?是,我曾经说过使用 PHP 可能是个很糟糕的决定,现在我却要在上面花更多的时间。为什么?......嗯,实际上有好几个原因。

PHP 的改进

在过去的三年里,PHP 改进了许多:

  • 增加了标量类型声明

  • 增加了返回值类型声明

  • 增加了多 catch 异常

  • 以及非常优异的性能改进

参考链接

  • https://secure.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

  • https://secure.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration

  • https://wiki.php.net/rfc/multiple-catch

  • http://www.zend.com/en/resources/php7_infographic

Symfony4 改变了世界

我很喜欢 Symfony 的兼容性承诺,以及他们13年来为之做出的努力。

所以,当 Symfony4(https://symfony.com/4)发布时,我听到了这个好消息就去尝试了一下,用它实现了一个小的应用程序。

结论是:太棒了,真的太棒了。

Symfony4 在简化安装上花费了许多心思,启动一个 Symfony 应用程序可以更方便快捷,需要的配置工作也更少。现在它已经赶超了 Laravel 的快速开发,同时它还鼓励许多很不错的开发实践,避免开发时落入自己的陷阱。而且它的性能也非常好(http://www.phpbenchmarks.com/en/)。

旧的 Lavarel 应用程序移植到 Symfony 很容易,只需要重新实现一些用 Go 写的功能,撤销之前实现的一些便捷方式(大多数归因于 Laravel 的全局 helper)即可。

一个非常好的意外收获是我可以很大程度上提高开发中的测试覆盖率。两遍甚至三遍地反复编写同一个应用程序让我对其非常熟悉

Symfony的调试工具栏也非常棒。它能显示从请求到响应过程中发生的一切,显示出一切警告和不推荐使用的警告,还有内置的性能工具,可以很容易地对代码进行性能测试。

阔别两年,我又从 Go 转回了 PHP

在学习了 Symfony 的 Form 组件之后,我深深地爱上了它。设计一个可访问、可重用的表单变得极其容易,还能在提交时验证表单内容,并且安全地根据表单数据填充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 实现会更容易维护。

做出正确的业务决策

还有一个没说的原因是,在过去几年,有好几家公司联系我,希望收购我们的一个产品。

但在听说我们的技术栈是 Go 时,他们感到有点惊讶。他们告诉我,他们更希望使用 PHP,因为他们大部分产品使用的也都是 PHP。在这一点上,我没法责备他们。

原文 https://dannyvankooten.com/from-go-back-to-php-again/


开源中国征稿开始啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 200 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:


推荐阅读





「好看」一下,分享给更多人↓↓