php7.4新特性

箭头功能的支持

由于匿名函数或闭包主要用于JS中,因此在PHP中似乎很冗长。它们的实施和维护程序也更加复杂。 引入箭头功能的支持将使PHP开发人员能够显着清理其代码并使语法更加简洁。结果,您将获得更高级别的代码可读性和简单性。看下面的例子。 因此,如果您以前不得不编写这段代码:

function fn($ n){
    return ($ n * $ n * $ n);
}
$ a = [1、2、3、4、5];
$ b = array_map('cube',$ a);
print_r($ b);

使用PHP 7.4,您可以通过以下方式重写它:

$ a = [1、2、3、4、5];
$ b = array_map(fn($ n)=> $ n * $ n * $ n,$ a);
print_r($ b);

由于能够创建简洁明了的代码,Web开发过程将更快,从而节省了时间。

类型属性的支持

虽然以前不可能将声明方法用于类变量和属性(包括静态属性),但现在程序员可以轻松地对其进行编码,而无需创建特定的getter和setter方法。

由于声明类型(不包括void和callable),您可以使用可为null的类型,即int,float,array,string,object,iterable,self,bool和parent。

如果Web开发人员尝试从类型中分配不相关的值,例如,将$name声明为字符串,则他或她将收到TypeError消息。

像箭头函数一样,类型属性也使PHP工程师可以使代码更短,更清晰

预加载

这个很酷的新功能的主要目的是提高PHP 7.4的性能。简而言之,预加载是在OPcache中加载文件,框架和库的过程,绝对是新版本的重要补充。例如,如果您使用框架,则必须为每个请求下载并重新编译其文件。

在配置OPcache时,这些代码文件首次参与请求处理,然后每次都要检查它们的更改。预加载使服务器可以将指定的代码文件加载到共享内存中。重要的是要注意,它们将始终可用于所有后续请求,而无需额外检查文件更改。

还需要提及的是,在预加载期间,PHP还消除了不必要的包含,并解决了类依赖关系以及具有特征,接口等的链接。

协变收益和协变参数

目前,PHP具有大多数不变的参数类型和不变的返回类型,这带来了一些约束。通过引入协变量(类型从更特定的类型到更通用的类型)返回和相反变量(类型从更普通的类型到更特定的类型)参数,PHP开发人员将能够将参数的类型更改为其超类型之一。反过来,返回的类型可以很容易地由其子类型替换。

弱引用

在PHP 7.4中,WeakReference类允许Web开发人员将链接保存到不阻止其销毁的对象。不要将其与Weakref扩展的WeakRef类混淆。由于此功能,他们可以更轻松地实现类似缓存的结构。 请参阅使用此类的示例:

<?php 
$obj = new stdclass();
$weakref = WeakReference::create($obj);
var_dump($weakref->get());
unset($obj);
var_dump($weakref->get());
?>

另外,请注意,您无法序列化弱引用。

合并分配运算符

合并运算符是PHP 7.4中提供的另一个新功能。当您需要将三元运算符与isset()一起应用时,这非常有用。这将使您能够返回第一个操作数(如果存在)并且不为NULL。如果不是,它将仅返回第二个操作数。 这是一个例子:

<?php
//获取$_GET ['user']的值并返回'nobody'
//如果不存在
$username = $_GET['user'] ?? 'nobody';
//这等效于:
$username = isset($_GET['user']) ? $_GET['user']:'nobody';
//可以链接合并:这将返回第一个
//定义的值超出$_GET['user'],$ _ POST ['user']和'nobody'。
$username = $_GET['user'] ?? $_POST['user'] ? 'nobody';
?>

数组表达式中的扩展运算符

与Array_merge相比,PHP 7.4将使工程师能够在数组中使用扩展运算符。这有两个主要原因。首先,扩展运算符被认为是一种语言结构,而array_merge是一个函数。第二个原因是,现在可以针对常量数组优化编译时间。因此,您将提高PHP 7.4的性能。 看一下数组表达式中的参数解压缩示例:

<?php
$parts = ['apple','pear'];
$fruits = ['banana','orange',... $ parts,'西瓜'];
var_dump($ fruits);

同样,有可能多次扩展同一数组。此外,由于可以在传播运算符之前或之后添加普通元素,因此PHP开发人员将能够在数组中使用其语法。

一种新的自定义对象序列化机制

在新版本的PHP中,可以使用两种新方法:serialize和unserialize。通过将Serializable接口的多功能性与实现sleep / wakeup的方法结合起来,此序列化机制将使PHP开发人员可以避免与现有方法相关的自定义问题。

引用反射

诸如symfony / var-dumper之类的库严重依赖ReflectionAPI来准确显示变量。以前,对引用反射没有适当的支持,这迫使这些库不得不依靠黑客来检测引用。PHP 7.4添加了ReflectionReference类来解决此问题。

支持从__toString()引发异常

以前,无法从__toString方法引发异常。这样做的原因是在标准库的许多函数中执行了将对象转换为字符串的操作,而并非所有这些函数都准备好正确地“处理”异常。作为该RFC的一部分,对代码库中的字符串转换进行了全面审核,并删除了此限制。