作为PHP的发展

版本对PHP代码基础的影响
版本对PHP代码基础的影响

使用即将到来的PHP 7.3,下一个迁移的问题返回我们的表。我们’LL听到了一个奇怪的混合,乞求移动到新版本的功能和安全,与一些旧版本威胁的持续威胁将很快不明意或更糟。实际上,有关于PHP代码基础的版本。

这种演变的特殊目击者是开源项目。它们通常必须支持广泛的版本,同时积极鼓励使用最新功能。这是平衡兼容性和进步的微妙工作。

要观察开源项目的方式处理PHP的演变,我们已经审核了1977年的开源PHP项目,通过从5.5到7.3的PHP版本用PHP版本注明它们。这教会了PHP对代码的影响,在很长一段时间内。让’s review them.

PHP棉绒

首先,我们’LL介绍PHP棉绒。 PHP LINT是较旧的静态分析工具之一:它读取文本文件,并检查其拼写和一些语法,而无需运行它。

检查非常快,因为PHP也在执行代码时使用它们:它是执行脚本的第一阶段。因此,这些都是灯光检查:基本上,Linting确保文件可以解析为令牌,并且相当大的Sanity规则适用。那些是灯光检查,因为更多对代码的验证将在执行时间内发生。代码可能lint,但有时,赢了’t execute.

PHP LINT是一个命令行呼叫。打开终端,直接PHP到文件:

php -l test.php No syntax errors detected in test.php

每天棉绒

每天喷丝与牙线一样重要。它’s实际上只能踩到编译的存储库代码:它确实保存了很多ridicule。至少,文件必须在您的应用程序必须支持的PHP版本之一中编译。但是,更好。

设置挂钩以检查MIND时间的PHP代码对您的应用程序产生积极影响:不再令人惊讶的未存入的PHP代码,这些PHP代码总是足够偷偷地生产。没有一个分钟的修复,最终陷入困境。

53%的OSS项目棉绒从5.5到7.3

在所有PHP版本上编译我们检查了1977年的OSS PHP项目,发现53%的PHP版本从5.5到7.3持续编译。使用最大错误报告级别,因此报告了每个通知和警告。然而,大多数代码从未产生任何错误。

 

 

 

 

 

3.5%永远不会棉花

永远不会引出的代码是始终是始终印花代码。某些代码存储库实际上保存任何PHP版本中一直不可编译的文件。由于它们是功能申请的一部分,因此唯一的希望是他们从未执行过。这也意味着它们从未测试过。可悲的是,这发生了。我们发现了3.5%的项目,该项目持有此类文件。切勿在所有PHP版本上编译

其中大多数都有1个不可计数的文件,但它们可能有更多:最多21个。虽然21是世界纪录,但也有13个甚至7个文件从未编译的应用程序。那’s very weird.

像往常一样,有一些有效的原因允许在存储库中编译的文件。他们很少见,但显然他们确实发生了。

最常见的原因是PHP代码生成:当原始代码必须生成一些PHP代码时,它实际上是用PHP必须生成代码的唯一工具:模板。模板是一个带有占位符的文本文件,该占位符填充有执行时间的值。其中大多数未执行本身,但在PHP执行之前将处理。他们最终看起来像php文件,但他们不是真的。

年轻人和旧项目

除了始终和永不犹豫的项目之外,还有另一种应用程序:年轻人和旧的应用程序。让我们见面告诉你:

在较新的PHP版本上编译在较旧的PHP版本上编译

 

 

 

 

 

 

 

右边的一个是一个年轻的应用程序。左边的那个是旧的。

所有应用程序都以当前的PHP版本启动,或有时即将到来。例如,如果您必须从今天开始从头开始发出PHP应用程序,请在PHP 7.3上投注是一个好主意。从2年前开始,我们将在7.0上投注。当原型实际运行时,您的代码将适合以前的最佳PHP版本。

启动新的应用程序时,很少考虑以向后兼容。没有人想跟踪他代码中使用的PHP的新功能。仅用于向后兼容性缘故,留出一个伟大的新功能。实际上,这是从头开始开始的主要原因。因此,新项目从新版本的PHP开始,并保持兼容性。

因此,年轻的项目通常100%与版本和其所有以下版本兼容。随着较旧版本,它通常可逗留,因为越来越多的不兼容会增加。

另一方面,旧项目具有相反的轨迹。他们可能已经开始了他们一天中最好的PHP版本,但在历史的某些时候,他们停止升级代码。源现在易受向后不相容的攻击,并继续增加它们的更多版本。因此,它从完美的兼容性开始,然后它会降低,因为PHP版本上升。

19%年轻代码,19%的旧代码

考虑到这些定义,我们可以检测到19%的PHP代码是年轻代码,并且尽可能多的代码。事实上,旧项目略低于年轻人。

年轻人和老年人之间的比率似乎相当平衡。对于被遗弃的较老项目以及新项目出现的新项目是自然的。平衡比率显示平台的健康成熟度。

出生,死亡版本的版本

显然,我们无法申请相同的推理‘always-linting’代码,代表大多数PHP项目。另一方面,基于旧和年轻的定义,最有趣的信息是开始或结束的版本。这是数字方面的细分。

 

 

最后的PHP版本编译

PHP 7.0显然吸引了很多关注,并产生了全新的一代。 PHP 7.1和5.6都具有相同的水平。它们代表了开发人员对新版本的吸引力。更有趣的功能会产生更多的新项目。

PHP 7.0,其往往的倒退不相容性大于50次,作为大坝:启动的项目在7.1中可能很容易地支持PHP 7.0,而那些从PHP 7.0开始的人肯定不支持’t想以前支持一个主要版本。

另一方面,大量应用程序与PHP 7.0死亡,只有与上面的原因相同:代码基础的更新太多,对于一项耗尽能量的项目来说太多了。然而,有些人也与PHP 7.0死亡,因为PHP 7.1具有一些不兼容的后向功能。

最终36个以PHP 7.2结尾的应用程序,可能仍处于升级过程中。这个数字可能在下个月内下降,因为代码升级并准备好运行7.2,然后7.3。

中年申请

PHP Linting Evolution中存在最后一个显着的模式。最初,我们将称之为中年申请。这是一个旧的和年轻的应用程序同时。它看起来像这样:

在某些PHP版本上编译

整个图形是一种山谷。它看起来像一个年轻的应用程序,它始于许多不兼容,或者旧的应用程序,以与特定的版本(或两者)保持活力。

那些非常罕见,因为它们代表了公司工作。此类代码不是开源,因此可能在我们的调查中代表。然而,一些项目是作为公司策略的一部分开放的,因此他们中的一些项目被纳入开源项目。

它开始作为一个年轻的代码,其中一个最亮的php版本的时间。然后,它基于此版本,并同时进行生产,它会陷入该版本。生产支持收入。由于生产基于代码,因此没有利益相关者敢于升级:太多的不确定性。

此时,代码被困在自我加强循环中:它累积的延迟越延迟,风险率将获得升级,更难以说服每个人实际使它发生。代码在其初始版本中保持运行,然后从未升级到较新版本。

结论

如果你’目前没有注明你的代码,只是这样做。很容易设置,并强制执行。这将告诉您当您的代码变得易受升级的群体时,但有几个月的提前。这给出了更多时间准备,要么是固定,要么避免问题。期待总是更便宜。

您自己的Linting的配置文件讲述了很多关于您的应用程序及其环境。可能是一个特别关注向后兼容性,仅使用最先进的PHP功能,或隐藏的原因在特定的PHP版本上滞留:下次您获得一个遗留代码,检查该配置文件并准备好准备好。

当迁移对于您的代码很重要时,请在L​​inting的顶部添加静态分析。工具喜欢 exakat. 能够查看PHP代码并报告PHP Lint未检测到的错误。这有助于您将您的迁移工作定位在代码的正确部分,而不是准备好。

One thought on “版本对PHP代码基础的影响

  1. pingback: exakat博客:版本对PHP代码基础的影响 - WebDev.am

评论被关闭。