php8新版本特性的介绍
墨初 编程开发 830阅读
下面介绍几个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的新特性还有很多,比如一些话法的调整,错误处理的改进,私有方法的继承以及一些扩展等。