Code前端首页关于Code前端联系我们

2019 年的 PHP 是什么样子,至少不是十年前的样子

terry 2年前 (2023-09-25) 阅读数 47 #后端开发

Brent 承认 PHP 仍然存在一些问题,比如很多核心功能仍然方法签名不一致,配置选项仍然混乱,但他自己的话基于此他的开发经验,他认为PHP是Web开发的绝佳选择。使用 PHP,他可以创建可靠、可维护和高质量的应用程序,他自己和他的客户都对最终结果感到满意。

在文章中,Brent 重点讲述了 PHP 多年来发展的好的方面。他用几点解释说“PHP 不再像十年前那样是糟糕的语言”:

  • PHP 正在积极开发。每年都会发布新版本
  • PHP 5,性能不断提高
  • 框架、包和平台的语言生态系统非常活跃
  • PHP 在不断发展,近年来添加了许多新功能。年
  • 各种开发工具这几年已经成熟并持续成长

PHP 积极开发,每年都会发布新版本

目前的 PHP 版本是去年 12 月发布的 7.3,以及 7.4预计将于今年年底发布。 PHP 8.0 是 7.4 之后的下一个版本。

分支首次发布积极支持直至安全支持
7.17.16 20.12.201。 1. 2018年12月5个月前2019.12.16个月
7.230.11.20171年5个月前5个月前3 11 月 0 日❙ 3019 2020 年 11 月 0 日一年 6 个月
7.36.12.20185 个月前6.12.202020.12.2020 6 个月 › 2020年21距

5.X时代还有2年零6个月,核心团队希望每年发布一个新版本,而他们在过去的四年里一直保持着这样的发布周期。通常,每个新版本都会得到两年的官方积极支持,随后仅进行一年的安全修复,目的是鼓励 PHP 开发人员尽可能保持最新状态。

2019 年的 PHP 是怎么样的,至少不是十年前的模样

更详细的发布和维护周期,可以查看PHP官网介绍:

  • https://www.php.net/supported-versions.php

如果你看上表,可以在Hyppyi 5 7中找到版本号,PHP 6去哪儿了?

来做科普吧。事实上,PHP 6 早在 2005 年就由 PHP 社区启动。但由于实现 Unicode 的难度很大,该项目最终被搁置。 PHP 官方没有发布 PHP 6 GA,并于 2010 年取消了 PHP 6。虽然 PHP 6 项目被取消,但其实现的大部分功能都集成到了 PHP 5 中。

PHP 6 已被撤回,但之前开发的一个主要版本被称为 PHP 6,因此许多参考资料和书籍都使用“PHP 6”来指代该版本。官方担心这会在 PHP 6 被废弃后造成混乱,所以干脆不使用 PHP 6.X 版本号,直接从 5 跳到了 7。

更多信息请参阅官方说明:https://wiki.php.net/rfc/php6。三次。

作者引用了 https://kinsta.com/blog/php-benchmarks 上的一个基准来说明这一点,并指出自 7.0 以来 PHP 性能有所提高,并且 PHP Web 应用程序比 Web 框架更快。其他语言。在某些情况下,性能要好得多。但他也表示,“当然,PHP 框架并不比 C 和 Rust 好,但它比 Rails 或 Django 好得多,可以与 ExpressJS 相媲美。”

有一个非常活跃的由框架、包和平台组成的语言生态系统

说到 PHP 框架,必须提到 WordPress,但作者表示 WordPress 并不能真正代表当前的 PHP 生态系统:“PHP 框架是不再只是 WordPress。”

Php 目前有两个主要的 Web 应用开发框架:Symfony 和 Laravel,以及 Zend、Yii、CakePHP 和 Code Igniter 等,此外还有许多较小的框架。

Symfony 和 Laravel 都拥有庞大的软件包和软件生态系统,包括仪表板和 CRM、独立软件包、CI、分析器、Web 套接字服务器、队列管理器和支付集成等。

此外,PHP 异步框架近年来也出现了。 Swoole、Amp 和 ReactPHP 是其中最好的。它们是用 PHP 或其他语言编写的框架和服务器,用于运行真正的异步 PHP。

作者认为,衡量 PHP 生态系统当前状态的一种方法是查看来自 PHP 最重要的包存储库 Packagist 的数据。通过下面的趋势图,可以看到软件包数量呈指数级增长,目前注册软件包数量为223,217个,安装总数已增加至14,827,204,847个。 PHP生态系统不再像以前那样脆弱。 ? .net/news/106695/w3techs-php-report-20190515

PHP在不断发展,近年来添加了许多新功能

虽然async和await这两个被高度要求的功能,还不是新的PHP features近年来不断被引入,语言本身也得到了多方面的改进。

下面列出了一些最流行的 PHP 新功能:

  • 短闭包

短闭包也称为箭头函数,是在 PHP 中编写较短函数的一种方法。当传递给 array_map 或 array_filter 等函数时,闭包非常有用。

// A collection of Post objects $posts = [/* … */];

$ids = array_map(fn($post) => $post->id, $posts);
  • 空连接运算符

空连接运算符,它与三元运算符类似,但左操作数的行为类似于isset,而不是使用其逻辑值。这使得该运算符对于数组特别有用。当未设置变量时,它还会设置默认值。

$undefined ?? 'fallback'; // 'fallback'

$unassigned;
$unassigned ?? 'fallback'; // 'fallback'

$assigned = 'foo';
$assigned ?? 'fallback'; // 'foo'

'' ?? 'fallback'; // ''
'foo' ?? 'fallback'; // 'foo'
'0' ?? 'fallback'; // '0'
0 ?? 'fallback'; // 0
false ?? 'fallback'; // false
  • Traits

Trait 是一种代码重用机制,可以减少单继承的一些限制。组合属性和类的语义定义了一种降低复杂性并避免与多重继承和混合相关的典型问题的方法。

属性与类类似,但它仅用于以细粒度且一致的方式对函数进行分组。它与传统传承相辅相成,可以实现横向的行为组合。类成员资格申请不需要继承。

<?php
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
  • 定义属性

属性类型,类变量可以定义类型,如:

class A
{
    public string $name;
    
    public Foo $foo;
}
  • 扩展运算符

扩展运算符,这是一种新语法,可以直接提取参数如:。 数组 $params 可以使用新语法直接扩展:

$db->query($query, ...$params);
  • JIT 编译器:PHP 8 确认支持 JIT

JIT 是一种编译器策略,将代码表示为中间状态并将其转换为架构。相关机器代码并即时执行。在 PHP 中,这意味着 JIT 将 Zend VM 生成的指令作为中间表示进行处理,并以依赖于体系结构的机器代码执行它们。换句话说,代码不再由 Zend VM 托管,而是由其底层处理器托管。 。

  • FFI

外部函数接口,可用于使用C数据类型从纯脚本语言调用C函数,从而更高效地开发“系统代码”。对于 PHP,FFI 开辟了一种编写 PHP 扩展并使用纯 PHP 绑定到 C 库的方法。

  • 匿名类

用于创建简单可删除对象的匿名类:

<?php

// Pre PHP 7 code
class Logger
{
    public function log($msg)
    {
        echo $msg;
    }
}

$util->setLogger(new Logger());

// PHP 7+ code
$util->setLogger(new class {
    public function log($msg)
    {
        echo $msg;
    }
});
  • 返回类型声明

声明返回类型:❙S

允许 Libsodium 成为核心扩展,Libsodium是一种现代密码学由安全专家精心选择的侧通道以避免漏洞的加密算法组成的库。

  • 生成器

生成器提供了一种简单、无样板的方式来实现迭代器。

近年来各种开发工具已经成熟并持续增长

在最后一部分,作者分析了当前也已经成熟并持续增长的PHP开发工具。

他以 Psalm、Phan 和 PHPStan 等静态分析器为例。这些工具静态分析 PHP 代码并报告各种错误和可能的错误。它们提供的功能在某种程度上与 TypeScript 相当,但由于 PHP 目前不提供移植,因此不允许自定义语法。这意味着PHP开发必须基于文档,但实际上PHP创建者Rasmus Lerdorf曾经提到过在核心中添加静态分析引擎的想法。

受到 JavaScript 社区的启发,PHP 目前正在进行转换相关的研究和开发,例如 Pre 项目,它允许将新的 PHP 语法转换为常规 PHP 代码。尽管这个想法已被证明在 JavaScript 中可行,但作者认为只有首先提供适当的 IDE 和静态分析支持,才可能在 PHP 中实现。

在讲完PHP目前的变化后,作者并没有得出“PHP是世界上最好的语言”的结论。相反,他这样说:

毕竟,请随意认为 PHP 是一种蹩脚的语言......我可以自信地说我喜欢使用它。

话虽如此,仍然认为 PHP 是一门垃圾语言也没关系。我可以自信地说我喜欢 PHP。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门