PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新。
PHP 7.4.0 进行了许多改进,并带来了一些新特性,包括:
Typed Properties 类型属性
类属性现在支持类型声明,以下示例将强制 $User-> id 只能分配 int 值,而 $User-> name 只能分配 string 值。
1 2 3 4 5 6 | <?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> User { </span><span style="color: #0000ff;">public</span> int <span style="color: #800080;">$id</span><span style="color: #000000;">; </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> <span style="color: #800080;">$name</span><span style="color: #000000;">; } </span>?> |
Arrow Functions 箭头函数
箭头函数提供了用于定义具有隐式按值作用域绑定的函数的简写语法。
1 2 3 4 5 | <?<span style="color: #000000;">php </span><span style="color: #800080;">$factor</span> = 10<span style="color: #000000;">; </span><span style="color: #800080;">$nums</span> = <span style="color: #008080;">array_map</span>(fn (<span style="color: #800080;">$n</span>) => <span style="color: #800080;">$n</span> * <span style="color: #800080;">$factor</span>, [1, 2, 3, 4<span style="color: #000000;">]); </span><span style="color: #008000;">//</span><span style="color: #008000;"> $nums = array (10, 20, 30, 40);</span> ?> |
将闭包传递给 array_map 或 array_filter 等函数时,它可以发挥极大的作用。
1 2 3 | <span style="color: #008000;">//</span><span style="color: #008000;"> A collection of Post objects $posts = [/* … */];</span> <span style="color: #800080;">$ids</span> = <span style="color: #008080;">array_map</span>(fn (<span style="color: #800080;">$post</span>) => <span style="color: #800080;">$post</span>->id, <span style="color: #800080;">$posts</span>); |
Limited Return Type Covariance and Argument Type Contravariance 有限返回类型协变与参数类型逆变
仅当使用自动加载时,才提供完全协变/逆变支持。在单个文件中,只能使用非循环类型引用,因为所有类在被引用之前都必须可用。
1 2 3 4 5 6 7 8 9 10 11 | <?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> A {} </span><span style="color: #0000ff;">class</span> B <span style="color: #0000ff;">extends</span><span style="color: #000000;"> A {} </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Producer { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> method ():<span style="color: #000000;"> A {} } </span><span style="color: #0000ff;">class</span> ChildProducer <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Producer { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> method ():<span style="color: #000000;"> B {} } </span>?> |
Unpacking Inside Arrays 打包内部数组
1 2 3 4 5 | <?<span style="color: #000000;">php </span><span style="color: #800080;">$parts</span> = ['apple', 'pear'<span style="color: #000000;">]; </span><span style="color: #800080;">$fruits</span> = ['banana', 'orange', ...<span style="color: #800080;">$parts</span>, 'watermelon'<span style="color: #000000;">]; </span><span style="color: #008000;">//</span><span style="color: #008000;"> ['banana', 'orange', 'apple', 'pear', 'watermelon'];</span> ?> |
Numeric Literal Separator 数值文字分隔符
数字文字可以在数字之间包含下划线。
1 2 3 4 5 6 | <?<span style="color: #000000;">php </span>6.674_083e-11; <span style="color: #008000;">//</span><span style="color: #008000;"> float</span> 299_792_458; <span style="color: #008000;">//</span><span style="color: #008000;"> decimal</span> 0xCAFE_F00D; <span style="color: #008000;">//</span><span style="color: #008000;"> hexadecimal</span> 0b0101_1111; <span style="color: #008000;">//</span><span style="color: #008000;"> binary</span> ?> |
Weak References 弱引用
弱引用使程序员可以保留对对象的引用,不会阻止对象被销毁。
Allow Exceptions from __toString () 允许从 __toString () 抛出异常
现在允许从 __toString () 引发异常,以往这会导致致命错误,字符串转换中现有的可恢复致命错误已转换为 Error 异常。
Opcache Preloading Opcache 预加载
新增 Opcache 预加载支持。
此外还有一些弃用,以及从核心中删除一些扩展,详情查看:
来自:
开源中国社区