PHP 8.0 是 PHP 语言的一个主版本更新。

它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe
运算符、JIT,并改进了类型系统、错误处理、语法一致性。

1.命名参数

PHP 7
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
PHP 8
htmlspecialchars($string, double_encode: false);

2.注解

现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。

PHP 7
class PostsController
{/*** @Route("/api/posts/{id}", methods={"GET"})*/public function get($id) { /* ... */ }
}
PHP 8
class PostsController
{#[Route("/api/posts/{id}", methods: ["GET"])]public function get($id) { /* ... */ }
}

3.构造器属性提升

更少的样板代码来定义并初始化属性。

PHP 7
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;}
}
PHP 8
class Point {public function __construct(public float $x = 0.0,public float $y = 0.0,public float $z = 0.0,) {}
}

4.联合类型

相对于以前的 PHPDoc 声明类型的组合, 现在可以用原生支持的联合类型声明取而代之,可在实际运行中验证。

PHP 7
class Number {/** @var int|float */private $number;/*** @param float|int $number*/public function __construct($number) {$this->number = $number;}
}
new Number('NaN'); // Ok
PHP 8
class Number {public function __construct(private int|float $number) {}
}
new Number('NaN'); // TypeError

5.Match 表达式

新的 match 类似于 switch,并具有以下功能:

PHP 7
switch (8.0) {case '8.0':$result = "Oh no!";break;case 8.0:$result = "This is what I expected";break;
}
echo $result;
//> Oh no!
PHP 8
echo match (8.0) {'8.0' => "Oh no!",8.0 => "This is what I expected",
};
//> This is what I expected

6.Nullsafe 运算符

现在可以用新的 nullsafe 运算符链式调用,而不需要条件检查 null。 如果链条中的一个元素失败了,整个链条会中止并认定为 Null。

PHP 7
$country =  null;
if ($session !== null) {$user = $session->user;if ($user !== null) {$address = $user->getAddress();if ($address !== null) {$country = $address->country;}}
}
PHP 8
$country = $session?->user?->getAddress()?->country;

7.字符串与数字的比较更符合逻辑

PHP 8 比较数字字符串(numeric string)时,会按数字进行比较。 不是数字字符串时,将数字转化为字符串,按字符串比较。

PHP 7
0 == 'foobar' // true
PHP 8
0 == 'foobar' // false

8.内部函数类型错误的一致性

现在大多数内部函数在参数验证失败时抛出 Error 级异常。

PHP 7
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
PHP 8
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

9.即时编译

PHP 8 引入了两个即时编译引擎。 Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。 典型的应用性能则和 PHP 7.4 不相上下。

10.类型系统与错误处理的改进

11.其他语法调整和改进

12.新的类、接口、函数

PHP8.0的新特性相关推荐

  1. php asserttrue,PHP8.0的新特性:错误处理方面已经改进

    1 系统函数引发TypeError和ValueError异常 一.TypeError和ValueError改进作用 #在PHP 8中,内部函数参数强制执行类型和值验证,如果不允许使用预期的类型或值,则 ...

  2. PHP8.X的新特性

    PHP8.X的新特性 随着2020年的PHP开发者峰会结束,8.X将在11月26发布 一.JIT JIT的新特性,则是将PHP代码转化为传统的机器码,而并非通过zend虚拟机来运行,这大大增加了运行速 ...

  3. .NET 4.0 Interop新特性ICustomQueryInterface (转载)

    .NET 4.0 Interop新特性ICustomQueryInterface 在.NET Framework v4.0发布的新功能中,在名字空间System.Runtime.InteropServ ...

  4. .NET Framework 4.0的新特性

    本文将揭示.NET 4.0中的3个新特性:图表控件.SEO支持以及ASP.NET 4可扩展的输出缓存. 图表控件 微软向开发者提供了大量可免费下载的图表控件,可以在.NET 3.5 ASP.NET或W ...

  5. mysql 5.0 php_PHP 5.0的新特性

    PHP 5.0的新特性 最近,读者可以从PHP 4.x版本转移到PHP 5.0版本.正如读者期望的那样,在一个新的主要版本中,它做出了一些重要变更.在这个版本中,PHP后台的Zend引擎经过了完全的重 ...

  6. Tensorflow 2.0的新特性

    Tensorflow 2.0的新特性 几天前,Tensorflow刚度过自己的3岁生日,作为当前最受欢迎的机器学习框架,Tensorflow在这个宝座上已经盘踞了近三年.无论是成熟的Keras,还是风 ...

  7. java 7.0 特性_JDK7.0语法新特性

    JDK7.0语法新特性 1,菱形语法(泛型实例化类型自动推断) List list = new ArrayList<>(); // <>这个真的很像菱形 2,在目前版本中,不可 ...

  8. 盘点Greenplum 6.0六大新特性及展望

    导读:本文介绍Greenplum 6.0的新特性. 作者:王春波 来源:大数据DT(ID:hzdashuju) Greenplum 6.0于2019年9月4日正式发布,内核版本从PostgreSQL ...

  9. C# 8.0 的新特性概览和讲解

    本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...

最新文章

  1. Django站点管理、视图和URL(管理界面本地化、创建管理员、注册模型类、发布内容到数据库、定义视图、配置URLconf)
  2. cisco 2950 3550 端口速率限制实现方法
  3. 基于SpringAop 的统一验证
  4. bat set命令详解
  5. 荣幸参加 微软 Teched 2012 会议
  6. java连接hive代码_Hive:用Java代码通过JDBC连接Hiveserver
  7. dd wipe 命令磁盘清空shell脚本,笔记本台机MAC通用
  8. 怎样提高java平台的性能
  9. 服务器系统更新失败进不了系统,第五人格更新后进不去怎么办 更新连接服务器失败...
  10. 安卓如何隐藏root
  11. UE4蓝图节点不同颜色代表
  12. 美女老师,大数据直播,老师做了什么,让全场尴尬。
  13. 用C++计算圆周长和面积
  14. 常见的计算机专业相关词汇汇总
  15. Acrel-3000电能管理系统保证企业生产人员的生命安全,提高生产人员的工作效率
  16. jQuery入门(1)
  17. CSS3 transform 2D变幻,过渡
  18. hp服务器显示器不亮,惠普电脑显示器不亮怎么办
  19. GPS简介和定位过程
  20. IOS屏幕截图---普通截图

热门文章

  1. WordPress图片路径批量替换方法
  2. Cascade Classifier
  3. wave读取wav文件_什么是WAV和WAVE文件(以及如何打开它们)?
  4. springboot手机推荐网站 毕业设计-附源码052329
  5. 东北大学和大连理工大学计算机考研分数线,速查!多所院校公布复试线!东北大学和大连理工大学复试线已出...
  6. 封神台在线靶场--尤里的复仇Ⅰ 小芳!【8题】
  7. 学计算机这么课最大的收获是啥,学习软件工程课程的收获和体会
  8. Numpy实验楼报告
  9. jeecgboot多表联合查询
  10. 程序员最恐怖的梦魇是什么?