php8.0正式版新特性和性能优化学习
2021/4/14 20:28:40
本文主要是介绍php8.0正式版新特性和性能优化学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
PHP团队宣布PHP8正式GA(链接)。php的发展又开启了新的篇章,PHP8.0.0版本引入了一些重大变更及许多新特性和性能优化机制.火速学习下~
JIT(Just in Time Compiler) 即时编译器
JIT
是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行.在 PHP 中,这意味着 JIT 将为 Zend VM 生成的指令视为中间表述,并以依赖于体系结构的机器码执行,也就是说托管代码的不再是 Zend VM,而是更为底层的 CPU.其较之前的流程改动和重点如下(来源于PHP8 JIT的主要参与者鸟哥@风雪之隅)
左图是PHP8之前的Opcache流程示意图, 右图是PHP8中的Opcache示意图, 可以看出几个关键点:
- Opcache会做opcode层面的优化,比如图中的俩条opcode合并为一条
- PHP8的JIT目前是在Opcache之中提供的
- JIT在Opcache优化之后的基础上,结合Runtime的信息再次优化,直接生成机器码
- JIT不是原来Opcache优化的替代,是增强
- 目前PHP8只支持x86架构的CPU
match表达式
match
是PHP8中新增的关键字(即无法再做类名),其作用与switch有点相似,用于变量的值转换与赋值,使用如下
Attributes(注解)
Attributes
即注解,它提供了一种向类添加元数据的方法,无需解析文档块.符号为#[]
,使用格式为#[param('value1','value2')]
,可定义多个也可写成数组形式
且两种形式可混合使用,如下
#[Url1("https://www.zhuyilong.fun")] #[Params1("name1", "age1")] #[ Params2("name2", "age2"), Url2("https://www.zhuyilong.xn--6qq986b3xl/") ] function newAttributes($arg = ''){} $obj = new ReflectionFunction('newAttributes'); $attributes = $obj->getAttributes(); echo'<pre>'; echo($attributes[1]->getName().'<br>'); print_r($attributes[2]->getArguments());输出为
Params1 Array ( [0] => name2 [1] => age2 )联合类型Union Types
Union Types
支持声明并接收多个不同类型的值,它是两种或多种类型的集合,使用时可以选择其一
static 返回类型
虽然已经可以返回 self,但是考虑到 PHP 具有动态类型的性质,PHP 8 中支持 static 返回类型将更加高效
class Test { public $_name = 'test'; public function getStatic(): static { return new static(); } } $obj = new Test(); var_dump($obj->getStatic()->_name); //输出: string(4) "test"弱映射WeakMap
WeakMap
弱映射的一般用例是将数据与单个对象实例关联起来,而不强制它们保持活动状态,从而在长时间运行的进程中有效地泄漏内存。例如,可以使用弱映射来记录计算结果
如上代码所示,每个对象都只会调用一次computeSomethingExpensive方法,同时,如果对象被销毁,它也会从映射中删除缓存值.
这篇关于php8.0正式版新特性和性能优化学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享