最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP 8新特性簡介

 更新時(shí)間:2020年08月18日 14:45:04   作者:麥葉  
這篇文章主要介紹了php8新特性的相關(guān)資料,幫助大家決定是否要升級新版本,感興趣的朋友可以了解下

PHP 8新特性

新的主要PHP版本PHP 8預(yù)計(jì)將于2020年底發(fā)布。它現(xiàn)在處于非?;钴S的開發(fā)階段,所以在接下來的幾個(gè)月里,事情可能會發(fā)生很大的變化。

在這篇文章中,我將持續(xù)更新預(yù)期的內(nèi)容列表:新特性、性能改進(jìn)和重大變化。因?yàn)镻HP 8是一個(gè)新的主版本,所以您的代碼被破壞的幾率更高。如果你一直在更新最新的版本,升級應(yīng)該不會太困難,因?yàn)榇蠖鄶?shù)有破壞性的更改在7之前就已經(jīng)廢棄了。*版本。

除了中斷更改之外,PHP 8還帶來了一些不錯(cuò)的新特性,比如JIT編譯器和union類型;還有更多!

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

考慮到PHP的動(dòng)態(tài)類型化特性,在很多情況下聯(lián)合類型是有用的。聯(lián)合類型是兩個(gè)或多個(gè)類型的集合,這些類型表示其中一個(gè)可以使用。

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

注意,void永遠(yuǎn)不能是union類型的一部分,因?yàn)樗硎尽案緵]有返回值”。此外,可以使用|null來編寫可為空的聯(lián)合,也可以使用現(xiàn)有的?符號:

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

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

JIT

即時(shí)編譯器承諾顯著的性能改進(jìn),盡管并不總是在web請求的上下文中。目前還沒有任何準(zhǔn)確的基準(zhǔn),但它們肯定會到來。

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

雖然已經(jīng)可以返回self,但靜態(tài)類型直到PHP 8才成為有效的返回類型。考慮到PHP的動(dòng)態(tài)類型特性,這一特性對許多開發(fā)人員都很有用。

class Foo
{
  public function test(): static
  {
    return new static();
  }
}

Weak maps

在PHP 7.4中添加的weakrefs RFC的基礎(chǔ)上,在PHP 8中添加了WeakMap實(shí)現(xiàn)。弱映射包含對對象的引用,這并不會阻止那些對象被垃圾收集。

以orm為例,它們通常實(shí)現(xiàn)保存對實(shí)體類的引用的緩存,以改進(jìn)實(shí)體之間關(guān)系的性能。這些實(shí)體對象不能被垃圾回收,只要這個(gè)緩存有一個(gè)對它們的引用,即使緩存是唯一引用它們的東西。

如果這個(gè)緩存層使用弱引用和映射,那么PHP將在沒有其他對象引用它們時(shí)對這些對象進(jìn)行垃圾收集。尤其是orm,它可以在一個(gè)請求中管理數(shù)百個(gè)(如果不是數(shù)千個(gè))實(shí)體;弱映射為處理這些對象提供了一種更好的、對資源更友好的方法。

下面是弱映射的樣子,一個(gè)來自RFC的例子:

class Foo 
{
  private WeakMap $cache;

  public function getSomethingWithCaching(object $obj): object
  {
    return $this->cache[$obj]
      ??= $this->computeSomethingExpensive($obj);
  }
}

::class on objects

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

$foo = new Foo();

var_dump($foo::class);

Stringable interface

Stringable接口可用于鍵入提示任何字符串或?qū)崿F(xiàn)了 tostring()的內(nèi)容。而且,無論何時(shí)類實(shí)現(xiàn)了 tostring(),它都會在后臺自動(dòng)實(shí)現(xiàn)接口,不需要手動(dòng)實(shí)現(xiàn)。

class Foo
{
  public function __toString(): string
  {
    return 'foo';
  }
}

function bar(Stringable $stringable) { /* … */ }

bar(new Foo());
bar('abc');

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

您已經(jīng)可以使用DateTime:: createfromimmutabledatetime ($immutableDateTime)從一個(gè)datetime對象創(chuàng)建一個(gè)DateTime對象,但是另一種方法比較麻煩。通過添加DateTime::createFromInterface()和datetime::createFromInterface(),現(xiàn)在就有了一種將DateTime和datetime對象相互轉(zhuǎn)換的通用方法。

DateTime::createFromInterface(DateTimeInterface $other);

DateTimeImmutable::createFromInterface(DateTimeInterface $other);

重新定義引擎的警告

許多以前只觸發(fā)警告或通知的錯(cuò)誤現(xiàn)在已經(jīng)轉(zhuǎn)換為正確的錯(cuò)誤。以下警告已更改。

  • Undefined variable: Error exception instead of notice
  • Undefined array index: warning instead of notice
  • Division by zero: DivisionByZeroError exception instead of warning
  • Attempt to increment/decrement property ‘%s' of non-object: Error exception instead of warning
  • Attempt to modify property ‘%s' of non-object: Error exception instead of warning
  • Attempt to assign property ‘%s' of non-object: Error exception instead of warning
  • Creating default object from empty value: Error exception instead of warning
  • Trying to get property ‘%s' of non-object: warning instead of notice
  • Undefined property: %s::$%s: warning instead of notice
  • Cannot add element to the array as the next element is already occupied: Error exception instead of warning
  • Cannot unset offset in a non-array variable: Error exception instead of warning
  • Cannot use a scalar value as an array: Error exception instead of warning
  • Only arrays and Traversables can be unpacked: TypeError exception instead of warning
  • Invalid argument supplied for foreach(): TypeError exception instead of warning
  • Illegal offset type: TypeError exception instead of warning
  • Illegal offset type in isset or empty: TypeError exception instead of warning
  • Illegal offset type in unset: TypeError exception instead of warning
  • Array to string conversion: warning instead of notice
  • Resource ID#%d used as offset, casting to integer (%d): warning instead of notice
  • String offset cast occurred: warning instead of notice
  • Uninitialized string offset: %d: warning instead of notice
  • Cannot assign an empty string to a string offset: Error exception instead of warning

以上就是PHP 8新特性簡介的詳細(xì)內(nèi)容,更多關(guān)于php 8新特性的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • php常用日期時(shí)間函數(shù)實(shí)例小結(jié)

    php常用日期時(shí)間函數(shù)實(shí)例小結(jié)

    這篇文章主要介紹了php常用日期時(shí)間函數(shù),結(jié)合實(shí)例形式總結(jié)分析了php日期時(shí)間相關(guān)的時(shí)間戳、格式化、時(shí)區(qū)獲取與設(shè)置、時(shí)間戳轉(zhuǎn)換與計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • PHP數(shù)據(jù)加密方式梳理介紹

    PHP數(shù)據(jù)加密方式梳理介紹

    數(shù)據(jù)加密在我們生活中的地位已經(jīng)越來越重要了,尤其是考慮到在網(wǎng)絡(luò)上發(fā)生的大量 交易和傳輸?shù)拇罅繑?shù)據(jù)。如果對于采用安全措施有興趣的話,也一定會有興趣了解PHP提供的一系列安全功能
    2022-09-09
  • PHP實(shí)現(xiàn)對數(shù)組分頁處理實(shí)例詳解

    PHP實(shí)現(xiàn)對數(shù)組分頁處理實(shí)例詳解

    這篇文章主要介紹了PHP實(shí)現(xiàn)對數(shù)組分頁處理,結(jié)合實(shí)例形式分析了php封裝的數(shù)組分頁類定義與使用技巧,需要的朋友可以參考下
    2017-02-02
  • php escape URL編碼

    php escape URL編碼

    php提供的URL編碼函數(shù)是基于字節(jié)的,對由ie的javascript函數(shù)escape編碼的數(shù)據(jù)就無能為力了。
    2008-12-12
  • php內(nèi)核解析:PHP中的哈希表

    php內(nèi)核解析:PHP中的哈希表

    PHP中使用最為頻繁的數(shù)據(jù)類型非字符串和數(shù)組莫屬,PHP比較容易上手也得益于非常靈活的數(shù)組類型。 在開始詳細(xì)介紹這些數(shù)據(jù)類型之前有必要介紹一下哈希表(HashTable)。 哈希表是PHP實(shí)現(xiàn)中尤為關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)
    2014-01-01
  • 模擬flock實(shí)現(xiàn)文件鎖定

    模擬flock實(shí)現(xiàn)文件鎖定

    模擬flock實(shí)現(xiàn)文件鎖定...
    2007-02-02
  • 解析php file_exists無效的解決辦法

    解析php file_exists無效的解決辦法

    本篇文章是對php中file_exists無效的解決辦法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP也能干大事 隨機(jī)函數(shù)

    PHP也能干大事 隨機(jī)函數(shù)

    這篇文章主要介紹了PHP也能干大事 隨機(jī)函數(shù),需要的朋友可以參考下
    2015-04-04
  • php通過session防url攻擊方法

    php通過session防url攻擊方法

    這篇文章主要介紹了php通過session防url攻擊方法,可通過session獲取用戶名再傳入U(xiǎn)RL來防止URL攻擊,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • php在服務(wù)器執(zhí)行exec命令失敗的解決方法

    php在服務(wù)器執(zhí)行exec命令失敗的解決方法

    出于安全的原因,服務(wù)器是不允許php或者其他語言執(zhí)行exec命令的,當(dāng)你有特殊需要php在服務(wù)器執(zhí)行exec命令時(shí),你需要設(shè)置兩個(gè)地方,不然就無法執(zhí)行成功
    2012-03-03

最新評論

汪清县| 建水县| 巴彦县| 商都县| 五莲县| 庄浪县| 吴桥县| 客服| 新竹县| 汉阴县| 眉山市| 夏邑县| 冕宁县| 西青区| 保德县| 咸阳市| 辽宁省| 张家港市| 南木林县| 保康县| 玉屏| 鹤壁市| 台北市| 武胜县| 赫章县| 博白县| 历史| 西乌珠穆沁旗| 博白县| 上林县| 乌兰浩特市| 永善县| 冷水江市| 巢湖市| 晋宁县| 汕头市| 佛山市| 酉阳| 寻乌县| 萨迦县| 延津县|