PHP 7.4于2019年11月28日正式发布
新的功能:
1.类型属性
类型属性现在支持类型声明 示例将强制$ user-> id只能分配整数值,而$ user-> name只能分配字符串值。
<?php
class User {
public int $id;
public string $name;
}
?>
箭头函数
箭头函数提供了用于定义具有隐式按值作用域绑定的函数的简写语法。
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>
有限返回类型协方差和参数类型协方差
现在,以下代码将起作用:
class A {}
class B extends A {}
class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
}
?>
仅当使用自动加载时,才提供完全差异支持。在单个文件中,只能使用非循环类型引用,因为所有类在被引用之前都必须可用。
空合并分配运算符
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
?>
在数组内部解包
$parts= ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>
数值文字分隔符
数字文字可以在数字之间包含下划线。
6.674_083e
-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary
?>
允许__toString()中的异常
现在允许 从__toString()引发异常。以前,这导致了致命错误。字符串转换中现有的可恢复致命错误已转换为 错误异常。
OP缓存
添加了对预加载代码的支持。
带标签名称数组的strip_tags()
strip_tags()现在还接受一个允许的标签数组: 现在,您可以编写 strip_tags($ str,['a','p'])来代替 strip_tags($ str,'
自定义对象序列化
添加了用于自定义对象序列化的新机制,该机制使用了两个新的魔术方法:__serialize 和__unserialize。
// 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;
?>
新的序列化机制取代了 Serializable接口,该接口将在以后弃用。
没有参数的数组合并功能
现在可以不带任何参数地调用 array_merge()和 array_merge_recursive(),在这种情况下,它们将返回一个空数组。与传播运算符(例如 array_merge(... $ arrays))结合使用时很有用。
proc_open()函数
proc_open()现在接受命令数组而不是字符串。在这种情况下,该过程将直接打开(无需通过shell),PHP将处理任何必要的参数转义。
<?php
proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);
?>
proc_open()现在支持 重定向和空描述符。
// Like 2>&1 on the shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);
// Like 2>/dev/null or 2>nul on the shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);
?>
SQLite3
添加了SQLite3 :: lastExtendedErrorCode() 以获取最后的扩展结果代码。
添加了SQLite3 :: enableExtendedResultCodes($ enable = true),这将使SQLite3 :: lastErrorCode() 返回扩展结果代码。
PDO_SQLite
PDOStatement :: getAttribute(PDO :: SQLITE_ATTR_READONLY_STATEMENT) 允许检查该语句是否为只读,即是否不修改数据库。
PDO :: setAttribute(PDO :: SQLITE_ATTR_EXTENDED_RESULT_CODES,true) 允许在PDO :: errorInfo() 和PDOStatement :: errorInfo()中使用SQLite3扩展结果代码。
网友评论