hi,欢迎访问本站!
当前位置: 首页编程开发正文

php8新版本特性的介绍

墨初 编程开发 492阅读

下面介绍几个php8新版中的特性,便于大家更好的了解php8,来更好的使用php的新版本加强网站的速度以及安全性。

php8 JIT特性

php8版本中加入了JIT新特性,此功能可以将php代码转化为传统的机器码,并非以前通过zend虚拟机来运行,这可以大大的加快了php的运行速度,但有个致命的缺点就是向以前老的php版本不兼容。

注:jit的性能在综合的基准测试中提高了3倍的性能,长时间运行中提高了1.5倍左右,典型的应用中和php7.4相持平。

# JIT可以通过 php.ini 中设置

opcache.jit = on  // on表示开 off表示关

php8 注释

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());

php类中成员的变量

在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 $host = "https://www.73so.com";
        public string $sex = "男"
    ){}
}

php8函数参数

在php8中函数的参数传入也发生了些变化,可以参考下面的示例。

新函数代码

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

php7中调用该函数

roule("user","usercent","login");

php8中可以按下面的方法调用函数

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

在php8函数的参数传入时如果带入了参数名,可以省略无意义的参数。

//调用方法1

roule(controller:"usercent",model:"login");

//调用方法2

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

php Match表达式

php8中新的match类类似于switch,具有以下的功能。

1、Match是一个表达式,它可以存到变量中也可以直接返回

2、Match分支公支持单行,它不需要break语句

3、Match使用了严格比较

php7

switch (8.0) {
    case '8.0':
        Sresult = "Oh no! "
    break;
    case 8.0:
        Sresult = "This is what I expected";
    break;
}
echo $result;

php8

# https://www.73so.com
echo match (8.0) {
    '8.0' => "Oh no!"
    8.0 => "This is what I expected"
};
//> This is what I expected

php 字符串与数字的比较

php8比较数字字符串时,会按数字进行比较。不是数字字符串时,将数字转为字符串,按字符串比较。

php7

0 == 'foo' // true

php8

0 == 'foo' // false

其它:

关于php8的新特性还有很多,比如一些话法的调整,错误处理的改进,私有方法的继承以及一些扩展等。

声明:无特别说明,转载请标明本文来源!
相关推荐