PHP8新特性

1欲逃、PHP8如約而至

訪問(wèn) PHP官方鳞芙,我們已經(jīng)可以看到php8穩(wěn)定版已經(jīng)可以下載使用了牺荠,這對(duì)PHP來(lái)說(shuō)是一個(gè)重大版本骚灸。有別于PHP7糟趾,萬(wàn)眾矚目的Just In Time Compilation(即時(shí)編譯)功能成為了大家期待的重點(diǎn)。
php8下載地址:
php8新特性介紹:

2甚牲、PHP8新特性

  1. 命名參數(shù)
    php8支持命名參數(shù)义郑,這樣靠前的有默認(rèn)的參數(shù),就不用必須明確寫(xiě)出丈钙,如下php8跳過(guò)第二和第三個(gè)默認(rèn)參數(shù)非驮,直接指定第四個(gè)參數(shù)。開(kāi)發(fā)者可以按自己的意愿更改參數(shù)順序雏赦,這樣的好處是劫笙,擺脫了php函數(shù)有些不經(jīng)常用的參數(shù)靠前,代碼中又必須明確寫(xiě)出才能給后面的參數(shù)賦值的困擾星岗。
    簡(jiǎn)單例子如下:詳情參考
//php7
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

//php8
htmlspecialchars($string, double_encode: false);
  1. 注解語(yǔ)法
    通過(guò)重復(fù)使用現(xiàn)有標(biāo)記T_SL和T_SR填大,注解是用“ <<”和“ >>”括起來(lái)的特殊格式的文本。詳情參考

注解可以用該語(yǔ)言應(yīng)用于許多事物:
函數(shù)(包括閉包和短閉包)
類(lèi)(包括匿名類(lèi))俏橘,接口允华,特征
類(lèi)常量
類(lèi)屬性
類(lèi)方法
功能/方法參數(shù)

namespace My\Attributes {
 
    <<PhpAttribute>>
    class SingleArgument {
        public $argumentValue;
 
        public function __construct($argumentValue) {
             $this->argumentValue = $argumentValue;
        }
    }
}
 
namespace {
    <<SingleArgument("Hello World")>>
    class Foo {
    }
 
    $reflectionClass = new \ReflectionClass(Foo::class);
    $attributes = $reflectionClass->getAttributes();
 
    var_dump($attributes[0]->getName());
    var_dump($attributes[0]->getArguments());
    var_dump($attributes[0]->newInstance());
}
 
/**
string(28) "My\Attributes\SingleArgument"
array(1) {
  [0]=>
  string(11) "Hello World"
}
object(My\Attributes\SingleArgument)#1 (1) {
  ["argumentValue"]=>
  string(11) "Hello World"
}
**/
  1. 構(gòu)造函數(shù)參數(shù)改進(jìn),詳情參考
//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,
  ) {}
}
  1. 聯(lián)合類(lèi)型
    當(dāng)給函數(shù)傳參敷矫,參數(shù)可能有多重類(lèi)型例获,傳統(tǒng)PHP7下并不支持校驗(yàn),PHP8可以完美實(shí)現(xiàn)校驗(yàn)曹仗。詳情參考
//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
  1. 匹配表達(dá)榨汤,詳情參考
    php8擁有更精簡(jiǎn)的新語(yǔ)法,這個(gè)贊成的成員非常多怎茫,反對(duì)的很少收壕,可見(jiàn)大家對(duì)switch語(yǔ)法意見(jiàn)頗大。
//php7
switch (8.0) {
  case '8.0':
    $result = "Oh no!";
    break;
  case 8.0:
    $result = "This is what I expected";
    break;
}
echo $result;

//php8
echo match (8.0) {
  '8.0' => "Oh no!",
  8.0 => "This is what I expected",
};
  1. 空安全運(yùn)算符轨蛤,詳情參考
//php7
$country =  null;

if ($session !== null) {
  $user = $session->user;

  if ($user !== null) {
    $address = $user->getAddress();
 
    if ($address !== null) {
      $country = $address->country;
    }
  }
}

//php8
$country = $session?->user?->getAddress()?->country;
  1. 字符串和數(shù)字比較蜜宪,詳情參考
    在php8中,數(shù)字和字符串比較時(shí)祥山,會(huì)將數(shù)字轉(zhuǎn)成字符串圃验,正好和之前相反。
//php7
0 == 'foobar' // true

//php8
0 == 'foobar' // false
  1. 函數(shù)內(nèi)部一致性校驗(yàn)錯(cuò)誤缝呕,詳情參考
    php8如果參數(shù)驗(yàn)證失敗澳窑,大多數(shù)內(nèi)部函數(shù)將引發(fā)Error異常斧散。
    這個(gè)改進(jìn)對(duì)開(kāi)發(fā)者提出了更高的要求,原來(lái)的warning錯(cuò)誤摊聋,會(huì)直接升級(jí)為error錯(cuò)誤鸡捐。
//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
  1. 中重要的即時(shí)編譯功能
    PHP 8引入了兩個(gè)JIT編譯引擎。 跟蹤JIT是兩者中最有希望的麻裁,它在綜合基準(zhǔn)測(cè)試中的性能提高了大約3倍箍镜,在某些特定的長(zhǎng)期運(yùn)行的應(yīng)用程序中提高了1.5–2倍。 典型的應(yīng)用程序性能與PHP 7.4相當(dāng)煎源。


    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末色迂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子手销,更是在濱河造成了極大的恐慌脚草,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件原献,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡埂淮,警方通過(guò)查閱死者的電腦和手機(jī)姑隅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)倔撞,“玉大人讲仰,你說(shuō)我怎么就攤上這事』居” “怎么了鄙陡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躏啰。 經(jīng)常有香客問(wèn)我趁矾,道長(zhǎng),這世上最難降的妖魔是什么给僵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任毫捣,我火速辦了婚禮,結(jié)果婚禮上帝际,老公的妹妹穿的比我還像新娘蔓同。我一直安慰自己,他們只是感情好蹲诀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布斑粱。 她就那樣靜靜地躺著,像睡著了一般脯爪。 火紅的嫁衣襯著肌膚如雪则北。 梳的紋絲不亂的頭發(fā)上矿微,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音咒锻,去河邊找鬼冷冗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惑艇,可吹牛的內(nèi)容都是我干的蒿辙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滨巴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼思灌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起恭取,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泰偿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蜈垮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體耗跛,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年攒发,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了调塌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惠猿,死狀恐怖羔砾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偶妖,我是刑警寧澤姜凄,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站趾访,受9級(jí)特大地震影響态秧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腹缩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一屿聋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧藏鹊,春花似錦润讥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)履肃。三九已至岸军,卻和暖如春褪测,著一層夾襖步出監(jiān)牢的瞬間红竭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工变隔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留规伐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓匣缘,卻偏偏與公主長(zhǎng)得像猖闪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肌厨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 新的 PHP 主要版本 PHP8 預(yù)計(jì)將于 2020 年底發(fā)布培慌。 它現(xiàn)在正處于非常活躍的開(kāi)發(fā)中柑爸,所以在接下來(lái)的幾個(gè)...
    八重櫻勿忘閱讀 524評(píng)論 0 2
  • 之前我們聊過(guò)JIT吵护,最近PHP8 alpha2發(fā)布了,引入了一個(gè)新的關(guān)鍵字:match, 這個(gè)關(guān)鍵字的作用跟swi...
    it阿布閱讀 307評(píng)論 0 3
  • PHP 8表鳍,PHP 的一個(gè)新的大版本馅而,預(yù)計(jì)將于 2020 年 12 月 3 日發(fā)布,這意味著將不會(huì)有 PHP 7....
    八重櫻勿忘閱讀 8,263評(píng)論 0 10
  • PHP8 alpha1已經(jīng)在昨天發(fā)布譬圣,相信關(guān)于JIT是大家最關(guān)心的用爪,它到底怎么用,有什么要注意的胁镐,以及性能提升到底...
    PHP9年架構(gòu)師閱讀 554評(píng)論 0 5
  • Welcome 目前網(wǎng)絡(luò)上充斥著大量的陳舊信息,讓PHP新手誤入歧途诸衔,傳播著錯(cuò)誤的實(shí)踐和糟糕的代碼盯漂,這必須得到糾正...
    layjoy閱讀 21,663評(píng)論 7 118