PHP 进化史 — 从 v5.6 到 v8.0

本文详细介绍了PHP从v5.6到v8.0的发展历程,重点讨论了各版本的性能提升和新特性,如匿名类、整除函数、空合并操作符、飞船符、标量类型声明等,并对比了不同版本之间的性能差异。PHP 7.x引入了如返回类型声明、可空类型、参数类型扩大等强类型特性,增强了安全性与效率。PHP 8.0引入了JIT编译器,进一步提升了性能。
摘要由CSDN通过智能技术生成

PHP 7.3 版本发布后,为了更好地理解这门广泛流行的编程语言的新特性和优化之处,我决定详细地研究下 PHP 开发:正在开发什么以及其开发方向。

 

在查看了 PHP 在 PHP 7.x 版本开发过程中实现的一系列特性的简要列表之后,我决定自己整合这个列表作为一个很好的补充,我相信也会有人觉得有用的。

 

我们将从 PHP 5.6 作为基准开始,研究添加或者更改了哪些内容。同时,我也在每一个被提及到的特性处添加了直达相关官方文档的链接,所以如果你有兴趣深入阅读,请随意。

我的官方群点击此处

PHP 7.0

匿名类的支持

在下面两种情况下,匿名类可能会被使用在命名类中:

 

当该类没有必要被记录下来的时候

当该类在程序执行过程中只使用一次的时候

new class($i) {
    public function __construct($i) {
        $this->i = $i;
    }
}

整除函数 — 安全的除法 (即使是被 0 整除)

该函数会返回第一个参数被第二个参数整除后结果的整数部分。当除数(也就是第二个参数)值为 0 时,该函数会抛出一个 E_WARNING 的错误并且返回 FALSE。

intdiv(int $numerator, int $divisor)

增加了新的空合并操作赋— 也就是 “??”

$x = NULL;
$y = NULL;
$z = 3;
var_dump($x ?? $y ?? $z); // int(3)

$x = ["c" => "meaningful_value"];
var_dump($x["a"] ?? $x["b"] ?? $x["c"]); // string(16) "meaningful_value"

添加新的操作符 — 飞船符(<=>)

飞船符用于优化和简化比较操作。

// 使用 <=> (飞船符)前
function order_func($a, $b) {
    return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);
}
// 使用 <=> (飞船符)之后
function order_func($a, $b) {
    return $a <=> $b;
}

标量类型声明

这只是在 PHP — v0.5 中实现更强类型编程语言特性的第一步。

function add(float $a, float $b): float {
    return $a + $b;
}

add(1, 2); // float(3)

返回类型声明

增加了返回包括继承在内的标量类之外的其他类型的特性。不知何故没有将其设置为可选特性 (将在 v7.1 中说明)

interface A {
    static function make(): A;
}
class B implements A {
    static function make(): A {
        return new B();
    }
}

组使用声明

// 显式使用语法:
use FooLibrary\Bar\Baz\ClassA;
use FooLibrary\Bar\Baz\ClassB;
use FooLibrary\Bar\Baz\ClassC;
use FooLibrary\Bar\Baz\ClassD as Fizbo;
// 分组使用语法:
use FooLibrary\Bar\Baz\{ ClassA, ClassB, ClassC, ClassD as Fizbo };

生成器委托

生成器函数体中允许使用如下新的语法:

yield from <expr>

性能提升

PHP 7 比 PHP 5.6 快上两倍。

显著降低内存占用

从图表中可以看出, PHP 7.0 在性能和(减少)内存占用上有巨大改进。 对于带有数据库查询的页面,7.0.0 版本在启用 opcache 的情况下比 5.6 版本 快 3 倍,在未启用 opcache 的情况下比其 快 2.7 倍。在内存占用方面,两者的差异也是非常明显的。

 

Throwable 接口**

** 重构的异常类具有非直观的命名方案,并且可以减少混淆,特别是对于初学者。

Errors 和 Exceptions 现在 实现了 Throwable.

这是 Throwable 层次结构:

interface Throwable
|- Error implements Throwable
    |- ArithmeticError extends Error
        |- DivisionByZeroError extends ArithmeticError
    |- AssertionError extends Error
    |- ParseError extends Error
    |- TypeError extends Error
        |- ArgumentCountError extends TypeError
|- Exception implements Throwable
    |- ClosedGeneratorException extends Exception
    |- DOMException extends Exception
    |- ErrorException extends Exception
    |- IntlException extends Exception
    |- LogicException extends Exception
        |- BadFunctionCallException exten
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值