PHP8.0的新特性
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 表达式
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.即时编译
10.类型系统与错误处理的改进
- 算术/位运算符更严格的类型检测
- Abstract trait 方法的验证
- 确保魔术方法签名正确
- PHP 引擎 warning 警告的重新分类
- 不兼容的方法签名导致 Fatal 错误
- 操作符 @ 不再抑制 fatal 错误。
- 私有方法继承
- Mixed 类型
- Static 返回类型
- 内部函数的类型 Email thread
- 扩展 Curl、 Gd、 Sockets、 OpenSSL、 XMLWriter、 XML 以 Opaque 对象替换 resource。
11.其他语法调整和改进
- 允许参数列表中的末尾逗号、 闭包 use 列表中的末尾逗号
- 无捕获的 catche
- 变量语法的调整
- Namespace 名称作为单个 token
- 现在 throw 是一个表达式
- 允许对象的 ::class
12.新的类、接口、函数
- Weak Map 类
- Stringable 接口
- str_contains()、 str_starts_with()、 str_ends_with()
- fdiv()
- get_debug_type()
- get_resource_id()
- token_get_all() 对象实现
PHP8.0的新特性相关推荐
- php asserttrue,PHP8.0的新特性:错误处理方面已经改进
1 系统函数引发TypeError和ValueError异常 一.TypeError和ValueError改进作用 #在PHP 8中,内部函数参数强制执行类型和值验证,如果不允许使用预期的类型或值,则 ...
- PHP8.X的新特性
PHP8.X的新特性 随着2020年的PHP开发者峰会结束,8.X将在11月26发布 一.JIT JIT的新特性,则是将PHP代码转化为传统的机器码,而并非通过zend虚拟机来运行,这大大增加了运行速 ...
- .NET 4.0 Interop新特性ICustomQueryInterface (转载)
.NET 4.0 Interop新特性ICustomQueryInterface 在.NET Framework v4.0发布的新功能中,在名字空间System.Runtime.InteropServ ...
- .NET Framework 4.0的新特性
本文将揭示.NET 4.0中的3个新特性:图表控件.SEO支持以及ASP.NET 4可扩展的输出缓存. 图表控件 微软向开发者提供了大量可免费下载的图表控件,可以在.NET 3.5 ASP.NET或W ...
- mysql 5.0 php_PHP 5.0的新特性
PHP 5.0的新特性 最近,读者可以从PHP 4.x版本转移到PHP 5.0版本.正如读者期望的那样,在一个新的主要版本中,它做出了一些重要变更.在这个版本中,PHP后台的Zend引擎经过了完全的重 ...
- Tensorflow 2.0的新特性
Tensorflow 2.0的新特性 几天前,Tensorflow刚度过自己的3岁生日,作为当前最受欢迎的机器学习框架,Tensorflow在这个宝座上已经盘踞了近三年.无论是成熟的Keras,还是风 ...
- java 7.0 特性_JDK7.0语法新特性
JDK7.0语法新特性 1,菱形语法(泛型实例化类型自动推断) List list = new ArrayList<>(); // <>这个真的很像菱形 2,在目前版本中,不可 ...
- 盘点Greenplum 6.0六大新特性及展望
导读:本文介绍Greenplum 6.0的新特性. 作者:王春波 来源:大数据DT(ID:hzdashuju) Greenplum 6.0于2019年9月4日正式发布,内核版本从PostgreSQL ...
- C# 8.0 的新特性概览和讲解
本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...
最新文章
- Django站点管理、视图和URL(管理界面本地化、创建管理员、注册模型类、发布内容到数据库、定义视图、配置URLconf)
- cisco 2950 3550 端口速率限制实现方法
- 基于SpringAop 的统一验证
- bat set命令详解
- 荣幸参加 微软 Teched 2012 会议
- java连接hive代码_Hive:用Java代码通过JDBC连接Hiveserver
- dd wipe 命令磁盘清空shell脚本,笔记本台机MAC通用
- 怎样提高java平台的性能
- 服务器系统更新失败进不了系统,第五人格更新后进不去怎么办 更新连接服务器失败...
- 安卓如何隐藏root
- UE4蓝图节点不同颜色代表
- 美女老师,大数据直播,老师做了什么,让全场尴尬。
- 用C++计算圆周长和面积
- 常见的计算机专业相关词汇汇总
- Acrel-3000电能管理系统保证企业生产人员的生命安全,提高生产人员的工作效率
- jQuery入门(1)
- CSS3 transform 2D变幻,过渡
- hp服务器显示器不亮,惠普电脑显示器不亮怎么办
- GPS简介和定位过程
- IOS屏幕截图---普通截图