新增命名参数功能 命名参数:就是具名参数,在调用函数的时候,可以指定参数名称,指定参数名称后,参数顺序可以不安装原函数参数顺序传 示例:?php计算余额方法functionbalance(amount,payment){}传统方式调用balance(100,20);php8使用命名参数调用balance(amount:100,payment:20);也可以换个顺序,这样来balance(payment:20,amount:100);注解功能 注解:注解可以将类定义成一个一个低耦合,高内聚的元数据类。在使用的时候通过注解灵活引入,反射注解类实例的时候达到调用的目的。注解类只有在被实例化的时候才会调用 示例?php老写法classUser{publicfunctionconstruct(stringname,intage){}}新写法,classUser{publicfunctionconstruct(protectedstringname,protectedintage){}}构造器属性提升 解释:就是在构造函数中可以声明类属性的修饰词作用域,节约了代码量,不用单独声明类属性了。 示例:?phpphp8之前classUser{publicfunctionconstruct(stringname,intage){}}php8写法,classUser{publicfunctionconstruct(protectedstringname,protectedintage){}}联合类型 解释:在不确定参数类型的场景下,可以使用。 示例:functionprintSomeThing(stringintvalue){vardump(value);}Match表达式 解释:和switchcase差不多,但是严格要求匹配 示例:?strmatch(key){athisa,cthisc,0this0,blastb,};输出lastb新增Nullsafe运算符 解释:简化了isnull判断 示例:?phpclassUser{publicfunctionconstruct(privatestringname){啥也不干}publicfunctiongetName(){}}不实例User类,设置为echousergetName();php8之前调用,报错echouser?getName();php8调用,不报错,返回空联合类型rfc 考虑到PHP动态语言类型的特性,现在很多情况下,联合类型都是很有用的。联合类型是两个或者多个类型的集合,表示可以使用其中任何一个类型。publicfunctionfoo(FooBarinput): 请注意,联合类型中不包含void,因为void表示的含义是根本没有返回值。另外,可以使用null或者现有的?表示法来表示包含nullable的联合体:publicfunctionfoo(Foonullfoo):publicfunctionbar(?Barbar):JITrfc JITjustintime编译器虽然不总是在Web请求的上下文中,但是有望显著地提高性能。目前还没有完成任何准确的基准测试,但是肯定会到来。属性rfc 属性在其他语言中通常被称为注解,提供一种在无需解析文档块的情况下将元数据添加到类中的方法。useAppAttributesExampleAExampleAttributeclassFoo{ExampleAttributepublicconstFOOExampleAExampleAttributepublicfunctionfoo(ExampleAttributebar){}}PhpAttributeclassExampleAttribute{publicfunctionconstruct(value){}} 新增static返回类型rfc 尽管已经可以返回self,但是static直到PHP8才是有效地返回类型。考虑到PHP具有动态类型的性质,此功能对于许多开发人员将非常有用。classFoo{publicfunctiontest():static{returnnewstatic();}}新增mixed类型rfc 有人可能将其称为必要的邪恶:mixed类型让许多人感觉十分混乱。然而,有一个很好的论据支持去实现它:缺少类型在PHP中会导致很多情况:函数不返回任何内容或返回空值我们需要多种类型的一种类型我们需要的是PHP中不能进行类型提示的类型 因为上述原因,添加mixed类型是一件很棒的事儿。mixed本身代表下列类型中的任一类型:arrayboolcallableintfloatnullobjectresourcestring 请注意,mixed不仅仅可以用来作为返回类型,还可以用作参数和属性类型。因为mixed类型已经包括了null,因此mixed类型不可为空。下面的代码会触发致命错误:functionbar():?mixed{} 已上是整理出来的新特性的变化,后续会继续整理,PHP8的发布会让PHP更上一层楼,相信PHP是世界上最好的语言!