PHP7.4 新特性

分类: 编程 标签: php

Typed properties

Arrow functions

return type covariance and argument type contravariance(协变返回和逆变参数)

Null coalescing assignment operator(NULL 合并运算符)

<?php
$array['key'] ??= 1;
// 等于下面
$array['key'] = $array['key'] ?? 1;
// 或
if (!isset($array['key'])) {
    $array['key'] = 1;
}

var_dump($array);

Unpacking inside arrays(数组内支持展开运算符)

<?php
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
function generator() {
    for ($i = 3; $i <= 5; $i++) {
        yield $i;
    }
}
$arr1 = [0, 1, 2, ...generator()];
<?php
$arr2 = ['red', 'green', 'blue'];
$arr3 = [...&$arr2]; // 报错:PHP Parse error:  syntax error, unexpected '&'
$red = 'red';
$arr4 = [&red, 'green', 'blue'];
$arr5 = ['white', ...$arr1, 'black'];

Numeric literal separator(数字字面量分隔符)

6.674_083e-11; // float

299_792_458;   // decimal

0xCAFE_F00D;   // hexadecimal

0b0101_1111;   // binary

0137_041;      // octal
// PHP Parse error:  syntax error, unexpected '_' (T_STRING)

100_;       // trailing

1__1;       // next to underscore

1_.0; 1._0; // next to decimal point

0x_123;     // next to x

0b_101;     // next to b

1_e2; 1e_2; // next to e

Weak references(弱引用)

<?php
$object = new stdClass;
$weakRef = WeakReference::create($object);

var_dump($weakRef->get());
unset($object);
var_dump($weakRef->get());

// 第一次 var_dump
object(stdClass)#1 (0) {}

// 第二次 var_dump,当 object 被销毁的时候,并不会抛出致命错误
NULL

Allow exceptions from __toString()

现在允许 __toString() 里面抛出异常了,而之前会抛出一个 fatal error。

OPcache 支持预加载

服务器启动时 – 在运行任何应用程序代码之前 – 我们可以将一组 PHP 文件加载到内存中 – 并使得这些预加载的内容,在后续的所有请求中 “永久可用”。这些文件中定义的所有函数和类在请求时,就可以开箱即用,与内置函数相同。

预加载由 php.ini 的 opcache.preload 进行控制。这个参数指定在服务器启动时编译和执行的 PHP 脚本。

opcache.preload=preload.php

在这个文件里面用 includerequire 等方法包含的文件名都会被预加载。

Custom object serialization(自定义对象序列化函数)

public function __serialize(): array;

public function __unserialize(array $data): void;

参考