php 7.4 特性速递

2019-03-28  本文已影响0人  蜗牛淋雨

PHP 7.4可能会在2019年12月的时候就要发布了,让我们先看一下PHP 7.4新增了哪些内容吧!

预加载

预加载机制的实现,在一定程度上极大的提升了PHP的性能。与传统的PHP框架或者项目不同的是:预加载机制的实现使得我们可以在服务启动的时候,把PHP文件加载到内存中,为后续的请求提供服务;而不像传统的方式,每次请求都要重新加载和编译文件。

预加载机制在一定程度上提升了PHP的性能,不过这种性能的提升不是无偿的,需要占用机器内存和一些损耗作为补偿。值得注意的是,每次更新完PHP源码文件,必须重启服务才可以使得更新后的源码生效。

属性类型的限定

php 7.4的这个特性有点儿像静态语言的类型限制,在定义类属性的时候,你可以限制属性是stringbool 或者一个类的实例等:

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

这种数据交换格式从未被标准化,所以它们将被弃用。

上一篇下一篇

猜你喜欢

热点阅读