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

2019 年 2 月 19 日 开源中国

本文经授权转载自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的调试工具栏也非常棒。它能显示从请求到响应过程中发生的一切,显示出一切警告和不推荐使用的警告,还有内置的性能工具,可以很容易地对代码进行性能测试。

在学习了 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 开发者提供一个发现、使用、并交流开源技术的平台。


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


推荐阅读

2018最大规模 Java 开发者调查报告:Oracle JDK 仍是主流、IDEA 最受欢迎

作为基础设施的开源项目如何可持续发展

与 30 家公司过招,得到了这章面试心法

利用策略模式优化过多 if else 代码

GitHub 被指审查内容,著名“换脸”开源项目遭限制访问

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

登录查看更多
0

相关内容

PHP 是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入 HTML 文档的脚本语言,语言的风格有类似于 C 语言,被广泛的运用。PHP 具有非常强大的功能,所有的 CGI 的功能 PHP 都能实现,而且支持几乎所有流行的数据库以及操作系统。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
专知会员服务
171+阅读 · 2020年6月4日
【Manning新书】现代Java实战,592页pdf
专知会员服务
99+阅读 · 2020年5月22日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【Manning2020新书】Elm 实战,344页pdf,Elm in Action
专知会员服务
49+阅读 · 2020年4月14日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
R_leaflet包_最易上手地图教程(一)
R语言中文社区
10+阅读 · 2019年3月6日
刚开始学编程?这几款小工具能让你事半功倍
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
Python越来越受欢迎,这中间发生了什么?
Python技术博文
4+阅读 · 2017年7月21日
Knowledge Flow: Improve Upon Your Teachers
Arxiv
5+阅读 · 2019年4月11日
Arxiv
11+阅读 · 2018年9月28日
Knowledge Based Machine Reading Comprehension
Arxiv
4+阅读 · 2018年9月12日
Arxiv
3+阅读 · 2018年6月14日
Arxiv
5+阅读 · 2018年3月28日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
专知会员服务
171+阅读 · 2020年6月4日
【Manning新书】现代Java实战,592页pdf
专知会员服务
99+阅读 · 2020年5月22日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【Manning2020新书】Elm 实战,344页pdf,Elm in Action
专知会员服务
49+阅读 · 2020年4月14日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
相关资讯
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
R_leaflet包_最易上手地图教程(一)
R语言中文社区
10+阅读 · 2019年3月6日
刚开始学编程?这几款小工具能让你事半功倍
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
Python越来越受欢迎,这中间发生了什么?
Python技术博文
4+阅读 · 2017年7月21日
相关论文
Top
微信扫码咨询专知VIP会员