php 7.4 特性速递
2019-03-28 本文已影响0人
蜗牛淋雨
PHP 7.4
可能会在2019年12月的时候就要发布了,让我们先看一下PHP 7.4新增了哪些内容吧!
预加载
预加载机制的实现,在一定程度上极大的提升了PHP
的性能。与传统的PHP
框架或者项目不同的是:预加载机制的实现使得我们可以在服务启动的时候,把PHP
文件加载到内存中,为后续的请求提供服务;而不像传统的方式,每次请求都要重新加载和编译文件。
预加载机制在一定程度上提升了PHP
的性能,不过这种性能的提升不是无偿的,需要占用机器内存和一些损耗作为补偿。值得注意的是,每次更新完PHP源码文件,必须重启服务才可以使得更新后的源码生效。
属性类型的限定
php 7.4
的这个特性有点儿像静态语言的类型限制,在定义类属性的时候,你可以限制属性是string
、bool
或者一个类的实例等:
class A
{
public string $name;
public Foo $foo;
public bool $flag;
}
类型限定
PHP
在之前的版本就已经支持类型限定了,只不过php7.4
及其以后的版本,在这方面会做的更好。先来看个例子:
class ParentType {}
class ChildType extends ParentType {}
class A
{
public function covariantReturnTypes(): ParentType
{ /* … */ }
}
class B extends A
{
public function covariantReturnTypes(): ChildType
{ /* … */ }
}
或者是下面的例子:
class A
{
public function contraVariantArguments(ChildType $type)
{ /* … */ }
}
class B extends A
{
public function contraVariantArguments(ParentType $type)
{ /* … */ }
}
相信接触过laravel
或者熟悉Ioc
的同学对这方面肯定不陌生。
外部函数接口
外部函数接口(Foreign Function Interface)简称FFI,允许从用户区调用C代码。这意味着PHP扩展可以用纯PHP编写。
null三元操作符
现在是这样使用:
$data['date'] = $data['date'] ?? new DateTime();
以后你就可以这么用了:
$data['date'] ??= new DateTime();
自定义序列化(Custom object serialization )
在 PHP 7.4 的时候,增加了 __serialize 和 __unserialize 这两个魔术方法,你可以用来自定义对象的序列化。
弃用ext/wwdx
这种数据交换格式从未被标准化,所以它们将被弃用。