开启JIT
opcache.jit=1205
opcache.jit_buffer_size=64M
JIT触发策略:
0:PHP脚本载入的时候就JIT
1:当函数第一次被执行时JIT
2:在一次运行后,JIT调用次数最多的百分之
(opcache.prof threshold*100)的函数
3:当函数/方法执行超过N(N和opcache.jit hot func相关)次
以后JIT4:当函数方法的注释中含有@jit的时候对它进行JIT5:当一个Trace执行超过N次 (和opcache.jit hot loopjit_hot_return等有关)以后JIT
JIT优化策略,数值越大优化力度越大:
0:不JIT
1:做opline之间的跳转部分的JIT
2:内敛opcode handler调用
3:基于类型推断做函数级别的JIT
4:基于类型推断,过程调用图做函数级别JIT
5:基于类型推断,过程调用图做脚本级别的JIT
可变传参
传参格式变化示例:
function test($name,$age){
echo $name.$age
}
调用参数是 可以指定参数名,顺序可以不固定
test(age:18,name:"testName")
test("testName",18)
以上两种格式函数是一样的
新增条件判断语句match
$a = 100 ;//强类型匹配 值和类型都匹配都正确才能匹配成功
$v =match($a){
100=>"匹配100",
200=>"匹配200",
300,400,500=>"匹配多个值",
default=> "默认值1"
}
echo $v
异常处理错误处理改变
php8中TypeError 和ValueError的改进
内部函数参数强制执行类型和值的验证,如果不允许使用预期的类型或值,则将抛出typeError 或者ValueError异常错误,在php8之前会提示php警告
1TYpeError 触发条件
提供的值不是正确的类型
2ValueError触发条件
提供的值类型正确,但php在上下文中不可接受,会引发ValueError异常
substr("thisisastring",[])
这种写法会提示
php8 提示Fatal error: Uncaught TypeError: substr():
Argument #2 ($offset) must be of type int, array given in
php7.2提示:Warning: substr() expects parameter 2 to be integer, array given in
匿名方法的变体
$fun1 = function(){
return "this is fun()";
}
$fun2 = fn() =>"this is fun()1";
$fun3 = fn($a,$b)=> $a+$b;
echo $fun2();
echo $fun1();
echo $fun3(10,20)
fun1 和fun2功能相同