一、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;
public $phone;
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 string $phone = "110110";
public string $sex = "男"
){}
}
四、命名参数
创建函数:
function roule($name,$controller,$model){
// ... code
}
在调用这个函数时,我们需要顺序输入参数
roule("user/login","UserController","login");
在PHP8中可以这样
roule(name:"user/login",controller:"UserController",model:"login");
因为可以需要输入参数名来区分传入的字段,那么在一些函数中,类比中间某项这段需要默认值,那我们就可以跳过这个字段
unction 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|string
当然在传参时也可以这样做
function create(bool|string $userId)