沐朽阁
Hello World!
Mu Xiu Ge

PHP8中新特性以及重大调整

PHP8的新特性

随着2020年的PHP开发者峰会结束,PHP8将在11月26发布

一、Jit

JIT的新特性,则是将PHP代码转化为传统的机器码,而并非通过zend虚拟机来运行,这大大增加了运行速度。但是缺点是向下不兼容。

# JIT 可以通过php.ini中设置
opcache.jit = on // on 开; off 关 

JIT具体的内容可以去看下鸟哥的PHP 8新特性之JIT简介

二、注解

PHP8之前PHP实现注解可以通过php-parser来实现,但现在可以直接通过Reflection 来获取。

/**
* @param Foo argument
* @see https:/xxxxxxxx/xxxx/xxx.html
*/
function dummy(Foo) {}
# 现在获取这段注解则可以使用
ref = new ReflectionFunction("dummy");
var_dump(ref->getAttributes("See")[0]->getName());
var_dump($ref->getAttributes("See")[0]->getArguments());

三、类中的成员变量

在PHP8之前,我们一般会这样定义一个类,首先要设置成员变量,然后在构造或者某一个方法为它赋值。

class User{
    public username;
    publicphone;
    public sex;
    public function __contruct(username,phone,sex
    ){
        this->username =username;
        this->phone =phone;
        this->sex =sex;
    }
}

但是 PHP8上我们可以这样写

class User{
    public function __contruct(
        public string username = "zhangsan",
        public stringphone = "110110";
        public string $sex = "男"
    ){}
}

四、命名参数

创建函数

function roule(name,controller,$model){
    // ... code
}

在调用这个函数时,我们需要顺序输入参数

roule("user/login","UserController","login");

在PHP8中可以这样

roule(name:"user/login",controller:"UserController",model:"login");

因为可以需要输入参数名来区分传入的字段,那么在一些函数中,类比中间某项这段需要默认值,那我们就可以跳过这个字段

function roule(name,controller="UserController",$model){
    // ... code
}
roule(name:"user/login",model:"login");

当然也可以与传统方式相结合

roule("user/login",model:"login");

五、联合类型

在PHP7中,我们在强制函数返回类型时是这样做的

function create() : bool

那么在PHP8中你可以使用多种预测类型

function create() : bool|string1

当然在传参时也可以这样做

function create(bool|string $userId)
赞赏
©版权归属沐朽阁所有
# #
首页      技术分享      PHP8中新特性以及重大调整

Mu Xiu Ge

PHP8中新特性以及重大调整
PHP8的新特性 随着2020年的PHP开发者峰会结束,PHP8将在11月26发布 一、Jit JIT的新特性,则是将PHP代码转化为传统的机器码,而并非通过zend虚拟机来运行,这大大增加了运行速度。但是…
扫描二维码继续阅读
2020-12-17