当前位置: 首页 > 后端技术 > PHP

PHP8了,时间真快

时间:2023-03-29 16:22:09 PHP

根据发布计划,PHP8将在今年11月26日发布,而原定于6月18日发布的第一个Alpha版本推迟到今天。下载地址:https://downloads.php.net/~po...PHP8是一个新的大版本,它引入了一些重大变化,以及许多新特性和性能改进,下面简要介绍一些亮点:JIT,Just-In-Time,即时编译最重要的特点就是JIT。这个特性的研发历时多年,在PHP5和7大版本系列中幸存下来(PHP6项目流产),直到去年3月才最终通过投票确定进入PHP8.JIT是一种编译器策略,它将代码表示为中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在PHP中,这意味着JIT会将ZendVM生成的指令视为中间表示,并以依赖于体系结构的机器代码执行它们,这意味着托管代码不再是ZendVM,而是更低级别的CPU。虽然从PHP7.0开始,通过优化核心数据结构HashTable、加强ZendVM中的某些操作码、不断完善OPCache的Optimizer组件,PHP的性能有了明显提升,但实际上这些优化似乎已经到了极限。现在JIT从底层开始,被认为是提高PHP性能的最佳方式。引入JIT后的性能对比(以及PHP8的整体性能)可以参考本月的Phoronixbenchmark测试(注:测试是在5月底的sourcebuild版本上进行的)。UnionTypes,联合类型UnionTypes支持接收多种不同类型的值,它是两种或多种类型的集合,使用时可以选择其中一种。在包括PHP在内的开源生态系统的标准库中,联合类型的使用非常普遍。PHP支持联合类型,这将允许将更多类型信息从phpdoc迁移到函数签名。可以说,继泛型之后,联合类型是目前类型声明体系的最大突破。Attributes,annotations这里的Attributes是其他语言中的注解(annotations),它提供了一种无需解析文档块就可以为类添加元数据的方法。虽然新的静态返回类型已经可以返回self,但考虑到PHP的动态特性,在PHP8中支持静态返回类型会更高效,对许多开发人员来说应该非常有用。classFoo{publicfunctiontest():static{returnnewstatic();}}WeakMap,WeakMapWeakMaps允许创建从对象到任意值的映射(如SplObjectStorage),而不会阻止用作键的对象上的垃圾回收。只要将对象添加到WeakMap中,GC就可以在条件触发时回收其占用的内存。在PHP7.4中,其实已经引入了对WeakReference(弱引用)的支持。然而,原始弱引用本身的用途有限,而弱映射在实践中更常用。PHP弱引用之上的有效弱映射是不可能的,因为没有提供注册销毁回调的功能。弱映射的一个常见用例是将数据与单个对象实例相关联,而不强制它们保持活动状态,并避免长时间运行的进程不必要地占用内存。Foo类{私有WeakMap$cache;publicfunctiongetSomethingWithCaching(object$obj):object{return$this->cache[$obj]??=$this->computeSomethingExpensive($obj);}}}关于WeakMap/WeakReference,可以参考本文的WeakRef部分。虽然是关于JS的,但是原理是一样的:https://www.oschina.net/news/...更多相关功能可以查看:https://www.php.net/index.php...https://wiki.php.net/rfchttps://github.com/php/php-sr...https://derickrethans.nl/arch...(DerickRethans的博客,他是PHPandthereleasemanagerofPHP7.4)此外,他在投票阶段也注意到了几个特性(即可能很快会被纳入某个版本),比如matchexpression(匹配表达式样式)和建议使用@@或#[]而不是<<>>更值得注意:需要注意的是PHP8是一个主要更新版本,有一些重大变化,因此最好查看UPGRADING文档RelatedMatters。但实际上,这些重大更改中有许多是在之前的7.*版本中引入的,因此如果您一直保持最新状态,升级到PHP8不会有太大影响。另外,PHP8中JIT的主要贡献者鸟哥@Laruence也在该版本发布前发表了相关文章,描述了JIT的开发过程。有兴趣的可以看看:鸟哥PHP8发布前写的。更多资源关注https://github.com/webtao520/...