欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

PHP8中新特性以及重大调整

时间:2022-11-03 07:05:51 | 浏览:2124

PHP 8,PHP 的一个新的大版本,预计将于2020年12月3日发布,这意味着将不会有 PHP 7.5 版本。PHP8目前正处于非常活跃的开发阶段,所以在接下来的几个月里,情况可能会发生很大的变化。在这篇文章中,我会维持一个最新的清单列表

PHP 8,PHP 的一个新的大版本,预计将于2020年12月3日发布,这意味着将不会有 PHP 7.5 版本。PHP8目前正处于非常活跃的开发阶段,所以在接下来的几个月里,情况可能会发生很大的变化。

在这篇文章中,我会维持一个最新的清单列表,列出预计会出现的新特性、性能提升和突破性的变化。由于 PHP 8 是一个新的大版本,因此您的代码被破坏的可能性更高。如果您始终保持运行 PHP 的最新版本,那么升级相对来说就会轻松很多,因为在7. *版本中,大多数重大更改均已弃用。

除重大更改外,PHP 8还带来了一些不错的新功能,比如说 JIT编译器, 联合类型, 属性,以及更多。

新特性

从新特性开始,请记住 PHP8 仍处于活动开发阶段,因此此列表将随着时间的推移而增长。

联合类型

考虑到 PHP 动态语言类型的特性,现在很多情况下,联合类型都是很有用的。联合类型是两个或者多个类型的集合,表示可以使用其中任何一个类型。

public function foo(Foo|Bar $input): int|float;

请注意,联合类型中不包含 void,因为void 表示的含义是“根本没有返回值”。 另外,可以使用 |null 或者现有的 ? 表示法来表示包含 nullable 的联合体 :

public function foo(Foo|null $foo): void;

public function bar(?Bar $bar): void;

JIT

JIT — just in time — 编译器虽然不总是在 Web 请求的上下文中,但是有望显着地提高性能。目前还没有完成任何准确的基准测试,但是肯定会到来。

如果您想进一步了解JIT对PHP的作用,可以阅读我写过的另一篇文章此处。

属性

属性在其他语言中通常被称为 注解 ,提供一种在无需解析文档块的情况下将元数据添加到类中的方法。

快速浏览一下,这里有一份来自 RFC 的属性示例:

use AppAttributesExampleAttribute;

<<ExampleAttribute>>

class Foo

{

<<ExampleAttribute>>

public const FOO = "foo";

<<ExampleAttribute>>

public $x;

<<ExampleAttribute>>

public function foo(<<ExampleAttribute>> $bar) { }

}

<<PhpAttribute>>

class ExampleAttribute

{

public $value;

public function __construct($value)

{

$this->value = $value;

}

}

如果您想深入了解属性如何工作以及如何构建自己的属性,您可以在此博客上阅读有关深入属性的信息。

新增 static 返回类型

尽管已经可以返回 self,但是 static 直到 PHP 8 才是有效的返回类型 。考虑到 PHP 具有动态类型的性质,此功能对于许多开发人员将非常有用。

class Foo

{

public function test(): static

{

return new static();

}

}

新增 mixed 类型

有人可能将其称为必要的邪恶:mixed 类型让许多人感觉十分混乱。然而,有一个很好的论据支持去实现它:缺少类型在 PHP 中会导致很多情况:

  • 函数不返回任何内容或返回空值

  • 我们需要多种类型的一种类型

  • 我们需要的是PHP中不能进行类型提示的类型

因为上述原因,添加 mixed 类型是一件很棒的事儿。mixed 本身代表下列类型中的任一类型:

  • array

  • bool

  • callable

  • int

  • float

  • null

  • object

  • resource

  • string

请注意,mixed 不仅仅可以用来作为返回类型,还可以用作参数和属性类型。

另外,还需要注意,因为 mixed 类型已经包括了 null,因此 mixed 类型不可为空。下面的代码会触发致命错误:

// 致命错误:混合类型不能为空,null已经是混合类型的一部分。

function bar(): ?mixed {}

throw 表达式

该RFC将throw从一个语句更改为一个表达式,这使得可以在很多新地方抛出异常:

$triggerError = fn () => throw new MyError();

$foo = $bar["offset"] ?? throw new OffsetDoesNotExist("offset");

弱映射

基于在 PHP 7.4 中新增的 弱引用 RFC,PHP 8 中新增了 WeakMaps(弱映射)的实现。 WeakMaps(弱映射)在保持对一些对象的引用的同时,并不会组织这些对象被垃圾回收机制处理 。

以ORM为例,它们通常实现保存对实体类的引用的缓存,从而提高实体类之间关联的性能。 只要缓存中存在对这些实体类的引用,那么这些类就无法被垃圾回收机制回收,尽管除了缓存中,已经没有别处再引用这些实体类,它们依然不会被垃圾处理机制处理。

如果这个缓存层使用了弱引用和弱映射,那么 PHP 将会在这些实体类没有任何其他引用时,对其进行垃圾回收。 尤其是对于 ORMs,它可以管理一个请求中的数百个(如果不是数千个)实体;弱映射可以提供一种更好的、对资源更友好的方式来处理这些对象。

下面是弱映射基本的例子,摘抄自 RFC :

class Foo

{

private WeakMap $cache;

public function getSomethingWithCaching(object $obj): object

{

return $this->cache[$obj]

??= $this->computeSomethingExpensive($obj);

}

}

允许对对象使用 ::class

一个很小但是很有用的新特性:现在可以在对象上使用 :: class ,而不必在对象上使用 get_class() ,它的工作方式跟 get_class() 相同。

$foo = new Foo();

var_dump($foo::class);

Non-capturing catches

在PHP 8 之前,无论何时你想要捕获一个异常,你都需要先将其存储到一个变量中,不管这个变量你是否会用到。通过 Non-capturing catches 你可以忽略变量,所以替换下面的代码:

try {

// Something goes wrong

} catch (MySpecialException $exception) {

Log::error("Something went wrong");

}

你现在可以这么做:

try {

// Something goes wrong

} catch (MySpecialException) {

Log::error("Something went wrong");

}

请注意,必须始终指定类型,不允许将 catch 留空,如果你想要捕获所有类型的异常和错误,需要使用 Throwable 作为捕获类型。

参数列表中的尾部逗号

当调用函数时已经支持尾部逗号,但是参数列表中仍然缺少尾随逗号支持。现在PHP8中允许这样做,这意味着您可以执行以下操作:

public function(

string $parameterA,

int $parameterB,

Foo $objectfoo,

) {

// …

}

从接口创建DateTime 对象

你已经可以使用
DateTime::createFromImmutable($immutableDateTime) 从 DateTimeImmutable 对象创建一个 DateTime 对象, 而另一种方法则更加取巧。通过添加
DateTime::createFromInterface()和
DatetimeImmutable::createFromInterface()现在有一种通用的方法可以将DateTime和DatetimeImmutable对象相互转换。

DateTime::createFromInterface(DateTimeInterface $other);

DateTimeImmutable::createFromInterface(DateTimeInterface $other);

相关资讯

PHP学习Thinkphp框架(1)——关于Thinkphp结构目录和数据库操作

Thinkphp:=> 简介:是由上海顶想公司开发的一款,PHP写成的,开源的MVC框架;官网:http://www.thinkphp.cn下载:https://github.com/top-think/framework 环境要求:

国产PHP框架ThinkPHP与SpeedPHP的浅析对比

本文主要简析两个国产的PHP框架ThinkPHP与SpeedPHP。通过学习发现,它俩在很多方面有着相似但又不同的地方:1.单一入口,二者都是单一入口文件。每个app都需要一个入口文件,且只能有一个入口文件。ThinkPHP生而就有多app

《PHP》什么是PHP框架,为什么要用PHP框架

PHP框架是什么?PHP框架提供了一个用以构建web应用的基本框架,从而简化了用PHP编写web应用程序的流程。这样不但节省开发时间,有助于建立更稳定的应用,而且减少了重复编码的开发。框架还可以帮助初学者建立更稳定的应用服务,这可以让你花更

「PHP发展史」PHP5.2到PHP5.6中新增的功能详解

截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护的 PHP5.2, 其余的一半用户在使用 PHP5.3。因为 PHP 那“集百家之长”的蛋疼语法,加上社区氛围不好,很多人对新版本

PHP开发者的福音,解读PHP异步通信框架Swoole的机制

在中国互联网行业膨胀的12-16年,PHP语言凭借自身易上手,开发周期短的优势,深受各中小企业的喜爱。小编也很荣幸在2009年底进入这一行业,为自己谋生分得一杯羹。但是PHP又先天有它的局限性,导致客户很多需求无法得到满足。大家都知道,P

ZWebPHP基于API的简易PHP开发框架

ZWebPHP 框架设计目的:标准化、体验统一、简单可靠、易于扩展后端PHP框架基于PHP、smarty 构建。基于composer自动加载。完全基于API接口设计,API文档自动生成。权限包含菜单访问权限和API接口访问权限。工具类、数据

PHP组件及框架推荐系列:PHP世界中最好的日志组件——Monolog

这也许,不,就是PHP世界中最好的日志组件—— Monolog所有的 PHPer,请站在巨人的肩膀上。随着 Composer 的普及,PHP 组件化开发思想越来越深入人心,我们没有必要重新自己打造轮子,只要确定需求和目标,设计好软件的架构,

「php框架教程」给PHP初学的你10个最常用的函数

PHP的功能越来越强大,里面有着非常丰富的内置函数。资深的PHP程序员对它们可能都很熟悉,但很多的PHP学习者,仍然对一些非常有用的函数不太熟悉。这篇文章里,我们就列举10个你或许不了解但实用的PHP函数,供大家参考和学习。1. php_c

纯PHP开发的高性能PHPsocket服务器框架

Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持W

PHP框架开发-如何拥有自己的PHP框架

框架是帮助初学者创建稳定的程序。使得你可以花更多的时间去创造真正的Web程序,而不是编写重复性的代码。框架第一阶段什么是框架?一直以来php框架被广泛利用,多半都是基本mvc架构模式的,国内外框架有HDPHP框架、ThinkPHP、CI框架

可持续更新的PHP框架---是时候有自己的PHP框架了

怎样搭建自己一个PHP框架?PHP写了5年,不想用其他框架,想自己搭建一套mvc oop的框架 可以用别人一些类库,但核心orm 之类希望自己写。这是最近遇到了别人的一个问题,5年时间的PHP资深程序是可以独立开发出自己框架。小编今天带来H

PHP应用中比较好的php框架

PHP的框架很多,有phalcon,kohana ,laravel,Yii,thinkPHP,ROR,HD,,CI,和ROR等,我觉得PHP框架其实本身就是一个工具而已,没有好与不好,只有合不合适。任何东西都没有最好,只是不同的取舍。有人说

PHP框架之ThinkPHP框架

ThinkPHP框架人们习惯性又叫它TP框架,是一个轻量级的国产PHP开发框架,快速、兼容而且简单, ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、

PHP框架的发展背景以及主流PHP框架横向对比

PHP框架的发展背景毫无疑问,Web框架技术在近几年已经得到了突飞猛进的发展和普及,在过去几年里,框架技术的普遍经历了比较大的完善过程,很大一部分可以归因于RubyonRails,以及在其他编程语言中流露出的MVC框架思想。如果你是一个PH

“PHP是最好的编程语言”这19款PHPWeb框架要知道

PHP是主要用于Web开发的服务器端的脚本语言,也用作通用编程语言。Web框架(WF)或Web应用程序框架(WAF)是一个软件框架,来支持Web应用程序的开发,包括Web服务,Web资源和Web API。Web框架能够自动化Web开发中执行

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈泰国乳胶枕官网台湾卤肉饭加盟官网香奈儿奢侈品许昌新闻头条网棉花天坑旅游网朝鲜旅游网江诗丹顿收藏网铁皮卡咖啡品鉴网南宁青秀山资讯网苹果电脑评测网橱柜品牌网刘浩存影迷网洪金宝影迷网埃隆马斯克粉丝网萧邦腕表之家
数字藏品系统开发网是目前国内领先的数字艺术品、nft、元宇宙、数字藏品、nft开发、数字藏品平台、数字藏品平台建设、数字藏品平台开发、nft平台开发数字收藏品交易业务、NFT艺术品交易业务专用系统平台,为品牌提供一站式建设数字藏品平台服务,拥有丰富的数藏平台建设与运营经验。
数字藏品系统开发 hezua.cn ©2022-2028版权所有