In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-19 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/01 Report--
这篇文章主要介绍"PHP8新特性有哪些及怎么使用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"PHP8新特性有哪些及怎么使用"文章能帮助大家解决问题。
PHP8前的PHP
PHP作为一门已经存在了26年的编程语言,可以说是比较长寿的语言了。但是作为一门长寿的语言,他有些与时代脱节了。在运行效率上,不如C语言java语言这样的编译型语言。在安全性上因为使用的人数比较多,所以被发现漏洞的几率也就越多。同时因为语法宽松,发现的漏洞也就更多了,最近版本的PHP7就曾爆出过重大漏洞,如果对安全有较高要求的话,PHP将不再是首选的语言。鉴于这些原因,PHP8的优化方向主要是性能和安全。
PHP8新特性
接下来我们来介绍一下PHP8的新特性,了解一下它做了什么更新。
如果你是初学者,不想关注php8的新特性,或者已经知道了这些新特性,可以直接跳过接下来的一大段介绍,但是相信我,看完这些介绍你会对PHP有一个大的改观。
命名参数
在PHP7中,命名参数的写法为:
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
在PHP8中,命名参数优化为:
htmlspecialchars($string, double_encode: false);
仅仅指定必填参数,跳过可选参数。
参数的顺序无关、自己就是文档(self-documented)
注解
在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) { /* ... */ }
}
现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。
构造器属性提升
在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,
) {}
}
现在可以用更少的样板代码来定义并初始化属性。
联合类型
在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
相较于以前的 PHPDoc 声明类型的组合, 现在可以用原生支持的联合类型声明取而代之,并在运行时得到校验。
Match表达式
在PHP7中,match表达式的写法为:
switch (8.0) {
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result;
//> Oh no!
在PHP8中,match表达式的写法优化为:
echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "This is what I expected",
};
//> This is what I expected
新的 match 类似于 switch,并具有以下功能:
Match 是一个表达式,它可以储存到变量中亦可以直接返回。
Match 分支仅支持单行,它不需要一个 break; 语句。
Match 使用严格比较。
Nullsafe运算符
在PHP7中,nullsafe运算符的写法为:
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
在PHP8中,Nullsafe运算符的写法优化为:
$country = $session?->user?->getAddress()?->country;
现在可以用新的 nullsafe 运算符链式调用,而不需要条件检查 null。 如果链条中的一个元素失败了,整个链条会中止并认定为 Null。
字符串与数字的比较逻辑
在PHP7中,字符串与数字的比较逻辑是这样的:
0 == 'foobar' // true
在PHP8中,字符串与数字的比较逻辑是这样的:
0 == 'foobar' // false
PHP 8 比较数字字符串(numeric string)时,会按数字进行比较。 不是数字字符串时,将数字转化为字符串,按字符串比较。
内部函数类型错误的一致性
在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
现在大多数内部函数在参数验证失败时抛出 Error 级异常。
即时编译
PHP 8 引入了两个即时编译引擎。 Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。 典型的应用性能则和 PHP 7.4 不相上下。
关于 JIT 对 PHP 8 性能的贡献
类型系统与错误处理的改进
算术/位运算符更严格的类型检测 RFC
Abstract trait 方法的验证 RFC
确保魔术方法签名正确 RFC
PHP 引擎 warning 警告的重新分类 RFC
不兼容的方法签名导致 Fatal 错误 RFC
操作符 @ 不再抑制 fatal 错误。
私有方法继承 RFC
Mixed 类型 RFC
Static 返回类型 RFC
内部函数的类型 Email thread
扩展 Curl、 Gd、 Sockets、 OpenSSL、 XMLWriter、 XML 以 Opaque 对象替换 resource。
其他语法调整和改进
允许参数列表中的末尾逗号 RFC、 闭包 use 列表中的末尾逗号 RFC
无变量捕获的 catch RFC
变量语法的调整 RFC
Namespace 名称作为单个 token RFC
现在 throw 是一个表达式 RFC
允许对象的 ::class RFC
新的类、接口、函数
Weak Map 类
Stringable 接口
str_contains()、 str_starts_with()、 str_ends_with()
fdiv()
get_debug_type()
get_resource_id()
token_get_all() 对象实现
New DOM Traversal and Manipulation APIs
是否升级到PHP8?
PHP 8是一个新的大版本,很多代码的写法都进行了优化,如果要将项目升级为PHP8,代码被破坏的可能性更高,不过如果你使用的是最新版本的PHP,升级起来就会比较轻松,因为其中的大多数重大更改在PHP7中已经弃用。
关于"PHP8新特性有哪些及怎么使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.