对于一般的 Web 开发人员和程序员来说,PHP 的声誉并不是很好,这已经是众所周知。

尽管 PHP 仍然是构建 Web 应用程序最常用的语言之一,但多年来 PHP 已经设法给自己赢得了代码库混乱、开发人员缺乏经验、代码不安全、核心库不一致等等的名声。

虽然许多反对 PHP 的论点今天仍然有效,但也有好的一面:您可以用 PHP 编写干净、可维护、快速和可靠的应用程序。

在这篇文章中,我想让你看到 PHP 开发技术有利的一面。

我想向您展示的是,尽管 PHP 有很多缺点,但它仍然是一门值得学习的语言。

我想让您知道,PHP5 时代即将结束。

如果你愿意的话,你可以写出现代的、干净的 PHP 代码,并且把 10 年前的很多烂摊子抛在脑后。

那么让我们来看看在过去的几年里,这种语言是如何变化的,甚至是如何成熟的。

我想请您把任何偏见放在一边,只花几分钟的时间,现代的 PHP 技术可能会让你感到惊讶甚至沉迷。

历史包袱

在深入讨论细节之前,让我们回顾一下 PHP 这门语言目前是如何一步一步发展的。

现在的 PHP 版本是 7.4,PHP8.0 将是下一个版本,也就是 2020 年底。

自从 5.* 时代末以来,核心团队试图保持一致的年度发布周期,并且在过去的四年中已经成功做到了这一点。

一般来说,每个新版本都会得到为期两年的积极支持,并且会再获得一年的“仅限安全修复”。

其目标是激励开发人员尽可能保持最新状态:例如,每年的小升级比在 5.4 到 7.0 之间的跳跃要容易得多。

最后,PHP5.6 是最新的 5.* 版本,下一个版本是 7.0。

如果你想知道 PHP6 发生了什么,你可以点击查看这篇文章。

PHP 现在的底层开发是由一群社区志愿者完成的,他们中的一些人是由雇主付钱让他们全职从事核心工作的。

大多数关于这种语言是如何发展的讨论都是在邮件列表上进行的。

现在这些历史问题你都有所了解了,让我们揭秘一些关于现代 PHP 的常见误解。

PHP的类型系统

PHP 一开始是一种非常弱的、动态类型的语言,这在当时有它的好处。

但是,自从人们开始在较大的项目中使用 PHP 以来,它的类型系统的缺点就变得明显起来,并且出现了对更强的类型支持的需求。

今天,PHP 是一种相当独特的语言:它仍然允许您编写完全动态的弱类型代码,但也有一个更强大的、可选择的类型系统。

结合静态分析工具,如 Psalm、Phan 和 PHPStan,您可以编写安全、强类型和静态分析的代码。

例如,看看这段 PHP 代码,它完全使用了它的现代类型系统:

declare(strict_types=1);

final class Foo

{

public int $intProperty = 2;

public ?string $nullableString = null;

private Bar $bar;

public function __construct(Bar $bar) {

$this->bar = $bar;

}

public function withInt(int $value): self

{

$clone = clone $this;

$clone->intProperty = $value;

return $clone;

}

public function unionTypes(int|float $input): void

{

// Union types will be added in PHP 8

}

}

说实话,PHP 的类型系统中仍然缺少一个重要特性:泛型。

他们有希望被加入,但目前还没有什么具体的东西。

如果是类型化数组,您将需要依赖文档块来获得适当的 IDE 支持:

/** @var int[] */

public array $arrayOfInts = [];

虽然类型化数组是泛型的常见用例,可以使用 Docblock 解决,但我们错过了更多功能,因为它们不是…语言。

现在还不行。

PHP的语法

在语法方面,7.* 时代在使 PHP 成为更成熟的语言方面做了很多好事。

为了说明这一点,我在 PHP 中列出了一个非详尽的新功能列表。

数组解构:

[$a, $b] = $array;

空合并运算符:

$value = $object->property ?? 'fallback if null';

$value = $array['foo'] ?? "fallback if key doesn't exists";

空合并赋值运算符:

public function get(string $input): string

{

return $this->cache[$input] ??= $this->sanitize($input);

}

数组扩展:

$a = [/* … */];

$b = [/* … */];

$mergedArray = [...$a, ...$b];

可变的函数:

public function get(Foo ...$foos): void

{

foreach($foos as $foo) {

// …

}

}

参数解包:

$this->get(...$arrayOfFoo);

类型化属性:

public int $intProperty;

箭头函数,也称为短闭包:

$ids = array_map(fn(Post $post): int => $post->id, $posts);

生成器:

function make(array $input): Generator

{

foreach ($input as $item) {

yield $this->doSomethingWith($item);

}

}

还有更多。

我希望从这份列表中可以清楚地看到,PHP 今天仍在不断发展,您可以肯定还会有更多的好东西问世。

PHP的性能

在过去的 5.* 时代里,php 的性能是不可描述的。

充其量也就是一般。

但是,在 7.0 版本中,PHP 核心的很大一部分被从头开始重写,导致性能提高了两三倍。

此外,每个 7.* 版本都对性能产生了积极影响。

不过,光靠语言是不够的。

让我们来看看基准测试。

幸运的是,其他人已经花了大量时间对PHP性能进行基准测试。

我发现 Kinsta 有一个很好的测评文章。

与性能相关的最新特性称为预加载,它基本上允许您将编译后的 PHP 代码部分存储在内存中。

你可以看看这里的一些基准。

当 PHP8 问世时,我们还将拥有一个 JIT 编译器,承诺进行有趣的性能改进,并允许 PHP 进入 web 开发以外的新领域。

框架和生态系统

接下来介绍社区使用 PHP 所做的工作。

让我们明确一下:恰恰相反,PHP 不再仅仅是 WordPress。

一般来说,有两个主要的Web应用程序框架,以及一些较小的框架:symfony 和 Laravel。

当然也有 Lamina,Yii,Cake,Code igniter 等等–但是如果你想知道现代 PHP 开发是什么样子,前两个中的一个是不错的。

这两个框架都有一个庞大的软件包和产品生态系统。

从管理面板和 CRM 到独立的软件包,CI 到分析器,无数的服务,如 WebSockets 服务器,队列管理器,支付集成;老实说,有太多的东西要列出。

这些框架是为实际开发而设计的;如果您需要纯粹的内容管理,WordPress、CraftCMS 和 Static 等平台正在不断改进。

衡量 PHP 生态系统当前状态的一种方法是查看 PHP 的主包存储库 Packagist。

它经历了指数级的增长。

每天的下载量为±2500万次,可以公平地说 PHP 生态系统不再像过去那样处于劣势了。

请看此图,其中列出了一段时间内软件包和版本的数量。

它也可以在 Packagist^2 ^网站上找到。

除了应用程序框架和 CMS 之外,我们还看到异步框架在过去几年中的兴起。

这些是用 PHP 或其他语言编写的框架和服务器,允许用户运行真正异步的 PHP 代码。

一些主要的玩家是 Swoole,Amp 和 ReactPHP。

自从我们冒险进入异步世界以来,像 websockets 和具有大量 IO 的应用程序这样的东西实际上已经与 PHP 世界相关了。

也有关于将 libuv 添加到核心的内部邮件列表的讨论。

对于那些没有意识到 libuv 的人来说:它与 Node.js 用来允许其所有异步性的库相同。

谁知道呢?

PHP8 可能是将其添加到核心的版本!

写在最后

我希望我能够向您展示 PHP 在过去几年中有了巨大的发展,您完全能够用它编写干净和可维护的代码。

如果您对目前流行的 PHP 代码感兴趣,可以查看我自己的一个项目的源代码,以及我们亲自维护的许多开放源码包。

因此,虽然这门语言肯定有它的缺点和 20 年的历史遗产,但我可以自信地说,我喜欢使用它。

根据我的经验,我能够创建可靠的、可维护的、高质量的软件。

我为之工作的客户对最终结果很满意,我也是。虽然仍然有可能用 PHP 做很多乱七八糟的事情,但我想说,如果使用得当,它仍是 Web 开发的一个很好的选择。

本作品采用《CC 协议》,转载必须注明作者和本文链接

By: Laravel-China 宁泽林

Blog: nizer.in

php总结与展望_2020 年的 PHP 回顾与展望相关推荐

  1. 基因测序的回顾与展望

    基因测序的回顾与展望 阳洋 ​ 自2005年人类基因组计划(Human Genome Project, HGP)完成以来,其成果已经应用在了基础科学.临床医疗等各个领域,而测序人类基因组的成本也从HG ...

  2. 《压缩感知回顾与展望》读书笔记

    压缩感知回顾与展望 在众多压感的研究中,其中各个矩阵的命名不一,这篇文章就算是对这些命名的一个统一吧,个人觉得还挺贴切. 1.N维实信号 x 的稀疏表示:  其中  叫正交基字典矩阵, 叫系数向量. ...

  3. 征稿:2018-2019音视频技术回顾与展望

    分享你的思考与洞察,和LiveVideoStack一起推动生态. 文 / 包研 从2017年3月17日发出第一篇原创文章开始,LiveVideoStack已经累计发送了近300篇技术文章,对于一个三. ...

  4. 肖仰华 | 知识图谱研究的回顾与展望

    本文转载自公众号知识工场. 本文整理自2017年10月19日肖仰华教授在知识图谱前沿技术课程(华东师范大学站)所做的报告,报告的题目为<知识图谱研究的回顾与展望>. 大家好,很多人在对知识 ...

  5. 高杰:对撞机的历史回顾与展望

    自从 Rolf Wideröe(1902-1996)在 1943 年为他提出的对撞机想法申请了秘密专利,以及世界上第一台环形正负电子对撞机 AdA 于 1963 年在法国奥赛(Orsay)的直线加速器 ...

  6. 【报告分享】砥砺前行 智启新章:2019-2020中国银行业发展回顾与展望.pdf(附下载链接)...

    今天给大家分享的报告是德勤发布的<砥砺前行 智启新章:2019-2020中国银行业发展回顾与展望.pdf>,报告包含如下四大部分: 1.2019年经济和金融形势回顾: 2.2019年大型上 ...

  7. 回顾过去 展望未来(写给自己)

    本来想用"昨天今天明天"做标题来着,但是人家本山大叔说了,"昨天今天明天不对,应该是过去现在和将来".呵呵.<br> 每到年底这个时候,大家都在回顾 ...

  8. 展望下未来的计算机400字,展望未来的作文400字

    展望未来的作文400字 未来是相对于现在我们所处的这个时刻而言的未来时间,它是一个时刻,也可以是一个时间段.相对而言,明天只是未来的一部分.展望未来的作文400字,我们来看看. [篇一:回首过去,展望 ...

  9. 2021安防视频监控运维市场回顾和展望

    2021安防视频监控运维市场回顾和展望 --专访弘度科技产品总监李焕佳 摘自<中国安防>2021.12期 随着国家"十四五"规划指出要加快数字化发展.建设数字中国等众多 ...

  10. 六年安卓开发的技术回顾和展望

    大家好,我是 shixin. 一转眼,我从事安卓开发工作已经六年有余,对安卓开发甚至软件开发的价值,每年都有更进一步的认识.对未来的方向,也从刚入行的迷茫到现在逐渐清晰.我想是时候做一个回顾和展望了. ...

最新文章

  1. QTableView中点击单元格弹出QComboBox
  2. android RSA加密
  3. C语言试题六十八之请编写函数实现亲密数
  4. CV Code | 计算机视觉开源周报 20190604期
  5. python使用curve_fit拟合任意分布
  6. vim配置之taglist插件安装
  7. golang微服务框架对比_最强开源微服务框架,全网独家整理
  8. 网络请求(HTTP协议)小结
  9. 自定义训练中使用Tensorboard
  10. 我可以在同一个catch子句中捕获多个Java异常吗?
  11. [Yii Framework] Another method to run cron in the share space server.
  12. 突破网吧及机房管理限制的方法(转)
  13. UML 返回消息的虚线箭头 如何画
  14. 嬴彻科技日: 发布《自动驾驶卡车量产白皮书》分享从量产走向无人技术路线
  15. tensorflow python cuda nividia驱动版本对照
  16. 在图书馆看到自己出版的图书是一种怎样的体验?
  17. 工程师职称评审两大阶段要明白!
  18. c语言动态规划算法数塔问题,动态规划之数塔问题...
  19. 天翼云linux远程密码不对,天翼云主机远程连接
  20. Android中通过来电转移实现“电话已关机”,“此号码已停机”等

热门文章

  1. android模拟触控power键
  2. Android实例精讲——通过ListView构造微信聊天界面视图
  3. 电脑电源问题,导致攒机电脑无法开机
  4. 抛物线模拟合地对空导弹轨迹[python][抛物线][地对空导弹轨迹]
  5. 《我想进大厂》之MQ夺命连环11问
  6. 8. 无内容可写?应该注重平常的素材收集
  7. cortex M3/4 内部总线
  8. cad修改快捷键_人手一份的绘图命令,CAD绘图必备,学会工资上万不是梦
  9. 我用FreeMind
  10. 电脑设置定时关机的5种方法