全网最全的 php8 新特性
目录
一、 官方网站
二、命名参数
三、属性注解
四、构造器属性的提升
五、联合类型
六、match表达式
七、nullsafe运算符
八、字符串数字弱类型比较优化
九、函数错误一致性
十、JIT优化
十一、其他改进
一、 官方网站
- php8官方网站:PHP: PHP 8.0.0 Release Announcement
二、命名参数
- 官方英文:Named arguments
- 传参的时候,可以跳过可选参数,这在之前版本中不行
<?php
//php7
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);//php8
htmlspecialchars($string, double_encode: false);
三、属性注解
- 官方英文:Attributes
- 可以使用PHP原生语法来使用结构化元数据,而非PHPDoc申明
<?php
//php7
class PostsController
{/*** @Route("/api/posts/{id}", methods={"GET"})*/public function get($id) { /* ... */ }
}//php8
class PostsController
{#[Route("/api/posts/{id}", methods: ["GET"])]public function get($id) { /* ... */ }
}
四、构造器属性的提升
- 官方英文:Constructor property promotion
- 可以使用更简便的方法初始化属性
<?php
//php7
class Point {public float $x;public float $y;public float $z;public function __construct(float $x = 0.0,float $y = 0.0,float $z = 0.0) {$this->x = $x;$this->y = $y;$this->z = $z;}
}//php8
class Point {public function __construct(public float $x = 0.0,public float $y = 0.0,public float $z = 0.0,) {}
}
五、联合类型
- 官方英文:Union types
- 老版本申明类型单一,php8可以申明多种类型
<?php
//php7
class Number {/** @var int|float */private $number;/*** @param float|int $number*/public function __construct($number) {$this->number = $number;}
}new Number('NaN'); // Ok//php8
class Number {public function __construct(private int|float $number) {}
}new Number('NaN'); // TypeError
六、match表达式
- 官方英文:Match expression
- switch表达式的简化
<?php
//php7
switch (8.0) {case '8.0':$result = "Oh no!";break;case 8.0:$result = "This is what I expected";break;
}//php8
echo match (8.0) {'8.0' => "Oh no!",8.0 => "This is what I expected",
};
七、nullsafe运算符
- 官方英文:Nullsafe operator
- 可以使用nullsafe运算符链式调用,而不需要检测null,如果其中一个不满足,直接中断并返回null
<?php
//php7
$country = null;if ($session !== null) {$user = $session->user;if ($user !== null) {$address = $user->getAddress();if ($address !== null) {$country = $address->country;}}
}//php8
$country = $session?->user?->getAddress()?->country;
八、字符串数字弱类型比较优化
- 官方英文:Saner string to number comparisons
- 字符串和数字的比较更加的严格
<?php
//php7
0 == 'foobar' // true//php8
0 == 'foobar' // false
九、函数错误一致性
- 官方英文:Consistent type errors for internal functions
- 以前错误类型会分notice、warning、error,现在大多数位TypeError
<?php
//php7
strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0//php8
strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0
十、JIT优化
- 官方英文:Relative JIT contribution to PHP 8 performance
- 这个改动被鸟哥成为php8中最重要的改动,php8中引入了两个即时编译引擎,Tracing JIT在两个中潜力更大,显示了三倍的性能,某些长时间运行的程序中也显示了1.5-2倍的性能改进
十一、其他改进
- 操作符@将不再抑制fatal类型错误
- assert()不再支持执行代码,减少了安全漏洞
- create_function()函数彻底被移除
- 因为libxml的依赖最低2.9.0起,所以XXE漏洞彻底可以消失了
- Phar中元信息不再进行自动反序列化了,phar://触发反序列化的姿势也告别了
- parse_str()必须传入第二个参数了,少了一种全局变量覆盖的方法
全网最全的 php8 新特性相关推荐
- 全网最全的 php7 新特性
目录 一.数组和字符串直接表达式 二.新的密码加密函数 三.异常和finally关键字 四.生成器( Generator ) 五.函数参数列表支持接收可变数量参数 六.幂运算,用来替代pow函数 七. ...
- php8网站,PHP8新特性解读(开发代码实例演示)
" 本文主要内容为解读PHP8.0的主要新特性"PHP8新特性 前言 PHP8在2020年11月26日正式发布,又一个里程碑到来. 根据官网的信息目前已经发布到了8.0.2版本,但 ...
- 八、 PHP 自定义函数 (php8 新特性)
1. 函数的基本语法 //创建函数 function fun_name( 参数列表) {//函数体:由一条或多条语名组成,可空 } /* 1. 必须使用关键字:function 声明 2. 函数名称不 ...
- 【PHP面试宝典1000题】PHP7和PHP8新特性大总结
PHP7新特性 1.标量类型声明 (1)默认模式 <?php // 默认模式(强制模式) function sumOfInts(int ...$ints) {return array_sum($ ...
- 史上最全jdk版本新特性大全
前言 在本文中,我将描述自第8版以来Java最重要且对开发人员友好的功能.为什么会有这样的主意?在Web上,您可以找到许多文章,其中包含每种Java版本的新功能列表.但是,由于缺少文章,因此无法简要概 ...
- php8支持哪些新特征,PHP8 新特性总结(一)
摘要:PHP8已经正式发布3个多月了,这对PHP来说是一个重大版本,这个版本中有很多新功能,例如联合类型.命名参数.Match表达式.Nullsafe空安全运算符.类的反射... PHP8已经正式发布 ...
- php match 1 0,PHP8 新特性 match 表达式详解
PHP8 alpha2发布了,最近引入了一个新的关键字:match, 这个关键字的作用跟switch有点类似. 这个我觉得还是有点意思,match这个词也挺好看,那么它是干啥的呢? 在以前我们可能会经 ...
- 最全Android 11新特性概览
功能和 API 概览 Android 11 面向开发者引入了一些出色的新功能和 API.以下几部分内容可帮助您了解适用于您的应用的功能并开始使用相关 API. 有关新增.修改和移除的 API 的详细列 ...
- 5-7月大更新!EasyOps®全平台34+新特性齐上线~
为了提供更好的产品使用体验,优维从未停止更新升级的脚步.在5-7月份,EasyOps全平台更新上线34+新功能,涉及Hyperlnsight超融合监控.CMDB.DevOps.AutoOps.ITSM ...
最新文章
- 用户态与内核态的区别
- Yii CDBCriteria常用方法
- 详细解释到底啥是共轭先验(用本科知识来解释)
- python字符串_python字符串API
- 世界上有条件JavaScript是什么?
- linux 多进程 同步,Linux内核同步,进程,线程同步
- 网管随笔02---【爱普生R230打印机清零大作战】
- Java语言之Integer类
- Unity HTC vive移动定位器的开发使用
- STM8 I2C从机
- 高纯度高活性艾美捷人重组MEGACD40L蛋白(可溶性)
- 《使用第三方库来显示jpeg图片》
- 【Python】5行代码采集3000+上市公司信息
- 机器学习入门的书单(数据挖掘、模式识别等一样)
- 屈原论东汉末年董卓之大汉帝国
- 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅amp;消费
- 平面设计师培训机构的课程都有哪些?平面设计课程内容。
- NUS CS5477 assignment1
- 专业化本地项目管理软件-project提供下载
- Pytorch详细教程——5.Tensors Explained
热门文章
- Linux下的豆瓣FM音乐播放器和虾米音乐播放器
- 面向对象与面向过程小结
- html 文字从数据库导出excel,html数据库导出excel表格
- css居中的实现方法(包括水平居中和垂直居中)
- 《计算机网络基础》上海交大
- 如何看待微软新开源的LightGBM?
- linux之认识软件包,rpm命令怎么用?怎么搭建软件仓库?怎么使用dnf下载软件?怎么搭建共享软件仓库?怎么搭建epel源软件仓库?
- (MATLAB)m文件调用simulink运行
- 抖音上用计算机弹,抖音计算器音乐乐谱有哪些_抖音计算器音乐乐谱详细介绍_游戏吧...
- NB-IoT中DCI Format N0格式解析