成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP8還有半年就要來了,來看看有哪些新特性

新聞 前端
新的 PHP 主要版本 PHP8 預(yù)計(jì)將于 2020 年底發(fā)布。它現(xiàn)在正處于非常活躍的開發(fā)中,所以在接下來的幾個(gè)月里,開發(fā)速度和開發(fā)進(jìn)程可能會(huì)有很大的變化。

 [[328051]]

新的 PHP 主要版本 PHP8 預(yù)計(jì)將于 2020 年底發(fā)布。

它現(xiàn)在正處于非常活躍的開發(fā)中,所以在接下來的幾個(gè)月里,開發(fā)速度和開發(fā)進(jìn)程可能會(huì)有很大的變化。

在這篇文章中,我會(huì)羅列出 PHP8 中會(huì)發(fā)生的一些改變:新功能、性能改進(jìn)和突破性變化。

因?yàn)?PHP8 是一個(gè)新的主要版本,所以代碼及語法向下兼容性會(huì)更低。

如果您一直保持與最新版本保持同步,那么升級(jí)應(yīng)該不會(huì)太難,因?yàn)榇蠖鄶?shù)突破性的更改在 7.* 版本中都已棄用。

除了突破性的變化,PHP8 還帶來了一些不錯(cuò)的新特性,比如 JIT 編譯器和 union types,當(dāng)然還有其它更多的特性。

新特性

從新特性開始說起,但是 PHP8 仍在積極開發(fā)中,因此這個(gè)清單將隨著時(shí)間的推移而增長。

聯(lián)合類型 (Union types) RFC

考慮到 PHP 的動(dòng)態(tài)類型特性,聯(lián)合類型在很多情況下都很有用。

聯(lián)合類型是兩個(gè)或多個(gè)類型的集合,這些類型指示可以使用這兩個(gè)類型中的任何一個(gè)。

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

我怎么感覺這個(gè)和 C 語言里的聯(lián)合體有點(diǎn)相似。

請注意,void 永遠(yuǎn)不能是聯(lián)合類型的一部分,因?yàn)樗硎?“根本沒有返回值”。

此外,可以使用 |NULL 或使用現(xiàn)有的?。

  1. public function foo(Foo|null $foo): void
  2.  
  3. public function bar(?Bar $bar): void

JIT RFC

JIT-Just-In-Time 編譯器承諾顯著提高性能,盡管在 Web 應(yīng)用可能沒有較大的好處。

在這一點(diǎn)上還沒有任何準(zhǔn)確的基準(zhǔn),但它們肯定會(huì)出現(xiàn)的。

靜態(tài)返回類型 (Static return type) RFC

雖然已經(jīng)可以返回 self ,但在 PHP8 之前,靜態(tài)不是有效的返回類型。考慮到 PHP 的動(dòng)態(tài)類型特性,它對(duì)許多開發(fā)人員都很有用。

  1. class Foo 
  2.  
  3.  
  4. public function test(): static 
  5.  
  6.  
  7. return new static(); 
  8.  
  9.  

弱映射 (Weak maps) RFC

基于在 PHP 7.4 中添加的 WeakRefs RFC 的基礎(chǔ)上,在 PHP 8 中 添加了 WeakMap 實(shí)現(xiàn)。WeakMap 包含對(duì)對(duì)象的引用,這不會(huì)阻止這些對(duì)象被垃圾回收。

以 ORM 為例,它們經(jīng)常實(shí)現(xiàn)包含對(duì)實(shí)體類的引用的緩存,以提高實(shí)體之間關(guān)系的性能。

這些實(shí)體對(duì)象不能被垃圾回收,只要該緩存有對(duì)它們的引用,即使緩存是唯一引用它們的東西。

如果該緩存層改為使用弱引用和映射,則 PHP 將在其他對(duì)象不再引用這些對(duì)象時(shí)對(duì)它們進(jìn)行垃圾回收。

特別是在 ORM 的情況下,它可以在一個(gè)請求中管理數(shù)百個(gè) (如果不是數(shù)千個(gè)) 實(shí)體;弱映射可以提供一種更好、更資源友好的方式來處理這些對(duì)象。

以下是 Weak maps 的用法,RFC 中的一個(gè)示例:

  1. class Foo 
  2.  
  3.  
  4. private WeakMap $cache; 
  5.  
  6. public function getSomethingWithCaching(object $obj): object 
  7.  
  8.  
  9. return $this->cache[$obj] 
  10.  
  11. ??= $this->computeSomethingExpensive($obj); 
  12.  
  13.  

可以在對(duì)象上使用::class RFC

一個(gè)小而有用的新特性:現(xiàn)在可以對(duì)對(duì)象使用::class,而不必對(duì)它們使用 get_class()。

它的工作方式與 get_class() 相同。

  1. $foo = new Foo(); 
  2.  
  3. var_dump($foo::class); 

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

您已經(jīng)可以使用 DateTime::createFromImmutable($immutableDateTime),從 DateTimeImmutable 對(duì)象創(chuàng)建 DateTime 對(duì)象,但是反過來很棘手。

通過添加 DateTime::createFromInterface() 和 DatetimeImmutable::createFromInterface(),現(xiàn)在有了一種將 DateTime 和 DateTimeImmutable 對(duì)象相互轉(zhuǎn)換的通用方法。

  1. DateTime::createFromInterface(DateTimeInterface $other); 
  2.  
  3. DateTimeImmutable::createFromInterface(DateTimeInterface $other); 

新的 Stringable 接口 RFC

Stringable 接口可用于鍵入提示任何字符串或?qū)崿F(xiàn)__toString()。

此外,每當(dāng)類實(shí)現(xiàn)__toString() 時(shí),它都會(huì)自動(dòng)在幕后實(shí)現(xiàn)接口,不需要手動(dòng)實(shí)現(xiàn)它。

  1. class Foo 
  2.  
  3.  
  4. public function __toString(): string 
  5.  
  6.  
  7. return 'foo'
  8.  
  9.  
  10.  
  11. function bar(Stringable $stringable) { /* … */ } 
  12.  
  13. bar(new Foo()); 
  14.  
  15. bar('abc'); 

新的 str_contains () 函數(shù) RFC

有些人可能會(huì)說這是早就應(yīng)該實(shí)現(xiàn)的功能,但是我們最終不必再依賴 strpos () 來知道一個(gè)字符串是否包含另一個(gè)字符串。

以前:

  1. if (strpos('string with lots of words''words') !== false) { /* … */ } 

現(xiàn)在:

  1. if (str_contains('string with lots of words''words')) { /* … */ } 

新的 fdiv () 函數(shù) PR

新的 fdiv () 函數(shù)的作用類似于 fmod () 和 intdiv () 函數(shù),它們允許被 0 整除。

您將得到 INF、-INF 或 NaN ,而不是錯(cuò)誤,具體取決于大小寫。

新的 get_debug_type () 函數(shù) RFC

get_debug_type () 返回一個(gè)變量的類型。

聽起來像是 gettype () 可以實(shí)現(xiàn)的功能。

get_debug_type () 為數(shù)組、字符串、匿名類和對(duì)象返回更有用的輸出。

例如,在類 \foo\Bar 上調(diào)用 gettype () 將返回 Object。

使用 get_debug_type () 將返回類名。

可以在 RFC 中找到 get_debug_type () 和 gettype () 之間差異的完整列表。

改進(jìn) traits 里的抽象方法 RFC

traits 可以指定必須由使用它們的類實(shí)現(xiàn)的抽象方法。

但是有一個(gè)警告:在 PHP8 之前,這些方法實(shí)現(xiàn)的簽名沒有經(jīng)過驗(yàn)證。

在以下代碼中有效:

  1. trait Test { 
  2.  
  3. abstract public function test(int $input): int
  4.  
  5.  
  6. class UsesTrait 
  7.  
  8.  
  9. use Test; 
  10.  
  11. public function test($input) 
  12.  
  13.  
  14. return $input; 
  15.  
  16.  

在使用 traits 并實(shí)現(xiàn)其抽象方法時(shí),PHP8 將執(zhí)行正確的方法簽名驗(yàn)證。

這意味著您需要改寫以下內(nèi)容:

  1. class UsesTrait 
  2.  
  3.  
  4. use Test; 
  5.  
  6. public function test(int $input): int 
  7.  
  8.  
  9. return $input; 
  10.  
  11.  

token_get_all () 的對(duì)象接口 RFC

函數(shù)的作用是:返回值的是一個(gè)數(shù)組。

此 RFC 使用 PhpToken::getall () 方法添加一個(gè) PhpToken 類。

此實(shí)現(xiàn)使用對(duì)象,而不是普通值。

它消耗更少的內(nèi)存,更容易閱讀。

變量語法調(diào)整 RFC

來自 RFC:“統(tǒng)一變量語法 RFC 解決了 PHP 變量語法中的一些不一致問題”,這個(gè) RFC 打算解決少數(shù)被忽略的情況。

內(nèi)部函數(shù)的類型批注

很多人都參與到為所有內(nèi)部函數(shù)添加適當(dāng)類型注釋的工作中。

這是一個(gè)長期存在的問題,通過在以前版本中對(duì) PHP 所做的所有更改,最終可以解決這個(gè)問題。

這意味著內(nèi)部函數(shù)和方法在反射中將具有完整的類型信息。

統(tǒng)一錯(cuò)誤類型 RFC

PHP 中的用戶定義函數(shù)已經(jīng)拋出 TypeErrors,但是內(nèi)部函數(shù)沒有拋出 TypeErrors,而是發(fā)出警告并返回 NULL。

從 PHP8 開始,內(nèi)部函數(shù)的行為已經(jīng)保持一致。

重新分類 zend engine 報(bào)錯(cuò) RFC

許多以前只觸發(fā)警告或通知的錯(cuò)誤已轉(zhuǎn)換為適當(dāng)?shù)腻e(cuò)誤。

以下警告已更改。

未定義變量:錯(cuò)誤異常而不是通知。

未定義的數(shù)組索引:警告而不是通知。

被零除:DivisionByZeroError 異常而不是警告。

嘗試遞增 / 遞減非對(duì)象的屬性‘% s’:錯(cuò)誤異常而不是警告。

試圖修改非對(duì)象的屬性‘% s’:錯(cuò)誤異常而不是警告。

嘗試分配非對(duì)象的屬性‘% s’:錯(cuò)誤異常而不是警告。

從空值創(chuàng)建默認(rèn)對(duì)象:錯(cuò)誤異常而不是警告。

正在嘗試獲取非對(duì)象的屬性‘% s’:警告而不是通知。

未定義屬性:% s::$% s:警告而不是通知。

無法將元素添加到數(shù)組,因?yàn)橄乱粋€(gè)元素已被占用:錯(cuò)誤異常而不是警告。

無法取消設(shè)置非數(shù)組變量中的偏移量:錯(cuò)誤異常而不是警告。

不能將標(biāo)量值用作數(shù)組:錯(cuò)誤異常而不是警告。

只能解包數(shù)組和遍歷:TypeError 異常而不是警告。

為 foreach () 提供的參數(shù)無效:TypeError 異常而不是警告。

偏移類型非法:TypeError 異常而不是警告。

isset 中的偏移類型非法或?yàn)榭眨篢ypeError 異常而不是警告。

未設(shè)置中的偏移類型非法:TypeError 異常而不是警告。

數(shù)組到字符串的轉(zhuǎn)換:警告而不是通知。

資源 ID#% d 用作偏移量,轉(zhuǎn)換為整數(shù) (% d):警告而不是通知。

發(fā)生字符串偏移量轉(zhuǎn)換:警告而不是通知。

未初始化的字符串偏移量:% d:警告而不是通知。

無法將空字符串分配給字符串偏移量:錯(cuò)誤異常而不是警告

默認(rèn)錯(cuò)誤報(bào)告級(jí)別

現(xiàn)在是 E_ALL,而不是除 E_NOTICE 和 E_DEVERATED 之外的所有內(nèi)容。

這意味著可能會(huì)彈出許多以前被悄悄忽略的錯(cuò)誤,盡管在 PHP8 之前可能已經(jīng)存在。

@運(yùn)算符不再忽略致命錯(cuò)誤

此更改可能會(huì)揭示在 PHP8 之前隱藏的錯(cuò)誤。請確保在生產(chǎn)服務(wù)器上設(shè)置 display_errors=off !

串聯(lián)優(yōu)先級(jí) RFC

雖然在 PHP7.4 中已不推薦使用,但此更改現(xiàn)在生效。

如果你這樣寫的話:

echo "sum: " . $a + $b;

PHP 以前會(huì)這樣解釋它:

echo ("sum: " . $a) + $b;

PHP 8 將會(huì)這樣解釋它:

echo "sum: " . ($a + $b);

反射方法簽名更改

反射類的三個(gè)方法簽名已更改:

ReflectionClass::newInstance($args);

ReflectionFunction::invoke($args);

ReflectionMethod::invoke($object, $args);

現(xiàn)已成為:

ReflectionClass::newInstance(...$args);

ReflectionFunction::invoke(...$args);

ReflectionMethod::invoke($object, ...$args);

升級(jí)指南指定,如果您擴(kuò)展了這些類,并且仍然希望同時(shí)支持 PHP 7 和 PHP 8,則允許以下簽名:

ReflectionClass::newInstance($arg = null, ...$args);

ReflectionFunction::invoke($arg = null, ...$args);

ReflectionMethod::invoke($object, $arg = null, ...$args);

 

責(zé)任編輯:張燕妮 來源: 今日頭條
相關(guān)推薦

2020-04-13 17:17:28

MySQL8.0功能

2019-06-14 14:30:33

HTTP3協(xié)議

2009-03-28 09:39:25

Windows 7微軟操作系統(tǒng)

2024-04-03 08:47:58

React服務(wù)端組件Actions

2020-11-24 06:00:55

PythonPython之父編程語言

2013-11-11 09:49:32

Linux TorvaLinux內(nèi)核

2021-06-21 09:04:36

Windows 11系統(tǒng)設(shè)計(jì)

2023-10-18 10:10:29

Node.js 21前端

2022-01-10 09:49:52

6G5G通信

2017-09-12 16:28:31

MySQLMySQL 8.0.3變化

2021-01-28 16:58:12

數(shù)字貨幣加密貨幣區(qū)塊鏈

2021-01-12 08:57:55

Fedora 34PHP8開發(fā)

2020-05-07 14:59:52

iOS 13.5蘋果更新

2022-03-29 10:59:00

5G6G

2024-08-28 13:00:00

2021-06-09 18:21:20

語法PHP8 \Match

2020-10-07 16:24:30

iPhone 12

2022-08-11 08:25:58

5G6G運(yùn)營商

2012-05-01 21:21:47

小米

2012-03-14 10:24:59

Android 4.0
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 九色 在线 | 国产精品久久久久久久久久妞妞 | 亚洲精选久久 | 欧美日韩成人在线 | 午夜小视频免费观看 | 日日夜夜免费精品视频 | 欧美精品三区 | 操到爽 | 国产在线观 | 国产电影一区二区 | 99久久免费观看 | 亚洲精彩视频在线观看 | 一区二区精品 | 亚洲国产第一页 | 91看片网| 天天天天天操 | 亚洲国产成人精品女人久久久 | 日日日干干干 | 国产精品亚洲一区二区三区在线 | 91精品国产色综合久久 | 91欧美精品成人综合在线观看 | 国产精品日韩在线观看 | 一区二区三区免费 | 精品久草| 国产欧美在线播放 | 国产一级精品毛片 | 国产精品av久久久久久久久久 | caoporn国产精品免费公开 | 一本色道精品久久一区二区三区 | 国产成人免费 | 激情一区二区三区 | 欧美一区二区三区视频 | 亚洲精品一区二区三区中文字幕 | 黄色免费观看网站 | 日韩中文字幕一区二区 | www.伊人.com | 亚洲高清一区二区三区 | 久久久男人的天堂 | 日韩1区| 亚洲网视频 | 亚洲高清在线 |