PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新。
类型属性
类属性现在支持类型声明。
<?php
class User {
public int $id;
public string $name;
}
?>
上面的示例将强制$user->id只能分配整数值,而$user->name只能分配字符串值。
箭头功能
箭头函数提供了用于定义具有隐式按值作用域绑定的函数的简写语法。
<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>
有限返回类型协变与参数类型逆变
现在,以下代码将起作用:
<?php
class A {}
class B extends A {}
class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
}
?>
仅当使用自动加载时,才提供完全差异支持。在单个文件中,只能使用非循环类型引用,因为所有类在被引用之前都必须可用。
空合并分配运算符
<?php
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
?>
打包内部数组
<?php
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>
数值文字分隔符
数字文字可以在数字之间包含下划线。
<?php
6.674_083e-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary
?>
带标签名数组的strip_tags()
strip_tags()现在也接受允许的标签数组:现在,您可以编写 strip_tags($str,['a','p'])来代替 strip_tags($str,' ')。 添加了用于自定义对象序列化的新机制,该机制使用了两个新的魔术方法:__serialize 和__unserialize。 更多PHP7.4特性,请查看:https://www.php.net/manual/zh/migration74.new-features.php#migration74.new-features.core.unpack-inside-array自定义对象序列化
<?php
// Returns array containing all the necessary state of the object.
public function __serialize(): array;
// Restores the object state from the given data array.
public function __unserialize(array $data): void;
?>