亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

php 8,PHP 的一個(gè)新的大版本,預(yù)計(jì)將于2020年12月3日發(fā)布,這意味著將不會(huì)有 PHP 7.5 版本。PHP8目前正處于非常活躍的開發(fā)階段,所以在接下來(lái)的幾個(gè)月里,情況可能會(huì)發(fā)生很大的變化。

在這篇文章中,我會(huì)維持一個(gè)最新的清單列表,列出預(yù)計(jì)會(huì)出現(xiàn)的新特性、性能提升和突破性的變化。由于 PHP 8 是一個(gè)新的大版本,因此您的代碼被破壞的可能性更高。如果您始終保持運(yùn)行 PHP 的最新版本,那么升級(jí)相對(duì)來(lái)說(shuō)就會(huì)輕松很多,因?yàn)樵?. *版本中,大多數(shù)重大更改均已棄用。

除重大更改外,PHP 8還帶來(lái)了一些不錯(cuò)的新功能,比如說(shuō) JIT編譯器, 聯(lián)合類型, 屬性,以及更多。

新特性

從新特性開始,請(qǐng)記住 PHP8 仍處于活動(dòng)開發(fā)階段,因此此列表將隨著時(shí)間的推移而增長(zhǎng)。

聯(lián)合類型

考慮到 PHP 動(dòng)態(tài)語(yǔ)言類型的特性,現(xiàn)在很多情況下,聯(lián)合類型都是很有用的。聯(lián)合類型是兩個(gè)或者多個(gè)類型的集合,表示可以使用其中任何一個(gè)類型。

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

請(qǐng)注意,聯(lián)合類型中不包含 void,因?yàn)関oid 表示的含義是“根本沒(méi)有返回值”。 另外,可以使用 |null 或者現(xiàn)有的 ? 表示法來(lái)表示包含 nullable 的聯(lián)合體 :

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

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

JIT

JIT — just in time — 編譯器雖然不總是在 Web 請(qǐng)求的上下文中,但是有望顯著地提高性能。目前還沒(méi)有完成任何準(zhǔn)確的基準(zhǔn)測(cè)試,但是肯定會(huì)到來(lái)。

如果您想進(jìn)一步了解JIT對(duì)PHP的作用,可以閱讀我寫過(guò)的另一篇文章此處。

屬性

屬性在其他語(yǔ)言中通常被稱為 注解 ,提供一種在無(wú)需解析文檔塊的情況下將元數(shù)據(jù)添加到類中的方法。

快速瀏覽一下,這里有一份來(lái)自 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;

}

}

如果您想深入了解屬性如何工作以及如何構(gòu)建自己的屬性,您可以在此博客上閱讀有關(guān)深入屬性的信息。

新增 static 返回類型

盡管已經(jīng)可以返回 self,但是 static 直到 PHP 8 才是有效的返回類型 。考慮到 PHP 具有動(dòng)態(tài)類型的性質(zhì),此功能對(duì)于許多開發(fā)人員將非常有用。

class Foo

{

public function test(): static

{

return new static();

}

}

新增 mixed 類型

有人可能將其稱為必要的邪惡:mixed 類型讓許多人感覺(jué)十分混亂。然而,有一個(gè)很好的論據(jù)支持去實(shí)現(xiàn)它:缺少類型在 PHP 中會(huì)導(dǎo)致很多情況:

  • 函數(shù)不返回任何內(nèi)容或返回空值
  • 我們需要多種類型的一種類型
  • 我們需要的是PHP中不能進(jìn)行類型提示的類型

因?yàn)樯鲜鲈颍砑?mixed 類型是一件很棒的事兒。mixed 本身代表下列類型中的任一類型:

  • array
  • bool
  • callable
  • int
  • float
  • null
  • object
  • resource
  • string

請(qǐng)注意,mixed 不僅僅可以用來(lái)作為返回類型,還可以用作參數(shù)和屬性類型。

另外,還需要注意,因?yàn)?mixed 類型已經(jīng)包括了 null,因此 mixed 類型不可為空。下面的代碼會(huì)觸發(fā)致命錯(cuò)誤:

// 致命錯(cuò)誤:混合類型不能為空,null已經(jīng)是混合類型的一部分。

function bar(): ?mixed {}

throw 表達(dá)式

該RFC將throw從一個(gè)語(yǔ)句更改為一個(gè)表達(dá)式,這使得可以在很多新地方拋出異常:

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

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

弱映射

基于在 PHP 7.4 中新增的 弱引用 RFC,PHP 8 中新增了 WeakMaps(弱映射)的實(shí)現(xiàn)。 WeakMaps(弱映射)在保持對(duì)一些對(duì)象的引用的同時(shí),并不會(huì)組織這些對(duì)象被垃圾回收機(jī)制處理 。

以O(shè)RM為例,它們通常實(shí)現(xiàn)保存對(duì)實(shí)體類的引用的緩存,從而提高實(shí)體類之間關(guān)聯(lián)的性能。 只要緩存中存在對(duì)這些實(shí)體類的引用,那么這些類就無(wú)法被垃圾回收機(jī)制回收,盡管除了緩存中,已經(jīng)沒(méi)有別處再引用這些實(shí)體類,它們依然不會(huì)被垃圾處理機(jī)制處理。

如果這個(gè)緩存層使用了弱引用和弱映射,那么 PHP 將會(huì)在這些實(shí)體類沒(méi)有任何其他引用時(shí),對(duì)其進(jìn)行垃圾回收。 尤其是對(duì)于 ORMs,它可以管理一個(gè)請(qǐng)求中的數(shù)百個(gè)(如果不是數(shù)千個(gè))實(shí)體;弱映射可以提供一種更好的、對(duì)資源更友好的方式來(lái)處理這些對(duì)象。

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

class Foo

{

private WeakMap $cache;

 

public function getSomethingWithCaching(object $obj): object

{

return $this->cache[$obj]

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

}

}

允許對(duì)對(duì)象使用 ::class

一個(gè)很小但是很有用的新特性:現(xiàn)在可以在對(duì)象上使用 :: class ,而不必在對(duì)象上使用 get_class() ,它的工作方式跟 get_class() 相同。

$foo = new Foo();

var_dump($foo::class);

Non-capturing catches

在PHP 8 之前,無(wú)論何時(shí)你想要捕獲一個(gè)異常,你都需要先將其存儲(chǔ)到一個(gè)變量中,不管這個(gè)變量你是否會(huì)用到。通過(guò) Non-capturing catches 你可以忽略變量,所以替換下面的代碼:

try {

// Something goes wrong

} catch (MySpecialException $exception) {

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

}

你現(xiàn)在可以這么做:

try {

// Something goes wrong

} catch (MySpecialException) {

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

}

請(qǐng)注意,必須始終指定類型,不允許將 catch 留空,如果你想要捕獲所有類型的異常和錯(cuò)誤,需要使用 Throwable 作為捕獲類型。

參數(shù)列表中的尾部逗號(hào)

當(dāng)調(diào)用函數(shù)時(shí)已經(jīng)支持尾部逗號(hào),但是參數(shù)列表中仍然缺少尾隨逗號(hào)支持。現(xiàn)在PHP8中允許這樣做,這意味著您可以執(zhí)行以下操作:

public function(

string $parameterA,

int $parameterB,

Foo $objectfoo,

) {

// …

}

從接口創(chuàng)建DateTime 對(duì)象

你已經(jīng)可以使用 DateTime::createFromImmutable($immutableDateTime) 從 DateTimeImmutable 對(duì)象創(chuàng)建一個(gè) DateTime 對(duì)象, 而另一種方法則更加取巧。通過(guò)添加DateTime::createFromInterface()和DatetimeImmutable::createFromInterface()現(xiàn)在有一種通用的方法可以將DateTime和DatetimeImmutable對(duì)象相互轉(zhuǎn)換。

DateTime::createFromInterface(DateTimeInterface $other);

DateTimeImmutable::createFromInterface(DateTimeInterface $other);

分享到:
標(biāo)簽:PHP
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定