php 8 jit,PHP8正式版发布,带来了注解和JIT
PHP8 正式版已經(jīng)發(fā)布,它引入了一些重大變更,以及許多新特性和性能優(yōu)化,包括命名參數(shù)、聯(lián)合類型、注解、Constructor Property Promotion、match 表達(dá)式、nullsafe 運(yùn)算符、JIT,以及對類型系統(tǒng)、錯(cuò)誤處理和一致性的改進(jìn)。
之前的PHPCon上聽過Nikic的一些分享,感興趣的小伙伴可以查看Nikic的PPT
在 PHP官網(wǎng) 也提到了一些新特性和功能說明,我們來看一看
命名參數(shù)
//PHP7
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
//PHP8
htmlspecialchars($string, double_encode: false);
1. 只指定必需的參數(shù),跳過可選參數(shù)。
2. 參數(shù)是獨(dú)立于順序和自我記錄的。
屬性
Attributes ,也就是我們常說的注解,而且語法不會影響低版本,因?yàn)?# 在PHP中是注釋符號
//PHP7
class PostsController
{
/**
* @Route("/api/posts/{id}", methods={"GET"})
*/
public function get($id) { /* ... */ }
}
//PHP8
class PostsController
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}
構(gòu)造函數(shù)屬性提升
Constructor property promotion ,讓我們在定義構(gòu)造函數(shù)的同時(shí)定義屬性,減少代碼量,提升編碼效率
//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,
) {}
}
聯(lián)合類型
Union types ,支持聲明不止一個(gè)類型
//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
匹配表達(dá)式
新匹配與switch類似,具有以下功能:
1. Match是一個(gè)表達(dá)式,意味著它的結(jié)果可以存儲在變量中或返回。
2. 匹配分支只支持單行表達(dá)式,不需要break;語句。
3. Match進(jìn)行嚴(yán)格的比較。
//PHP7
switch (8.0) {
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result;
//> Oh no!
//PHP8
echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "This is what I expected",
};
//> This is what I expected
NULL 安全運(yùn)算符
Nullsafe operator ,現(xiàn)在我們可以使用新的nullsafe操作符來代替空檢查條件。當(dāng)對鏈中的一個(gè)元素求值失敗時(shí),整個(gè)鏈的執(zhí)行將中止,整個(gè)鏈的計(jì)算結(jié)果為null
這個(gè)特性確實(shí)挺不錯(cuò)的,減少了不少代碼量和邏輯代碼
//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;
更合理的字符串與數(shù)字比較
Saner string to number comparisons ,當(dāng)與數(shù)字字符串進(jìn)行比較時(shí),PHP8使用數(shù)字比較。否則,它將數(shù)字轉(zhuǎn)換為字符串并使用字符串比較
//PHP7
0 == 'foobar' // true
//PHP8
0 == 'foobar' // false
內(nèi)部函數(shù)的一致類型錯(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
JIT
PHP8最值得期待的莫過于注解和JIT了,對JIT感興趣的可以看鳥哥的博客《PHP 8新特性之JIT簡介》
PHP8引入了兩個(gè)JIT編譯引擎。跟蹤JIT是這兩種方法中最有前途的一種,它在綜合基準(zhǔn)測試上的性能提高了大約3倍,在某些特定的長時(shí)間運(yùn)行的應(yīng)用程序上性能提高了1.5到2倍。典型的應(yīng)用程序性能與PHP7.4不相上下。
JIT對PHP8性能的影響:
除此之外,還有一些類型系統(tǒng)和錯(cuò)誤處理的改進(jìn)、其他語法調(diào)整和改進(jìn)以及新的類,接口和功能,詳細(xì)的可以去 PHP官網(wǎng) 查看
這里值得一提的是Opaque objects,用來代替Curl、Gd、Sockets、OpenSSL、XMLWriter和XML擴(kuò)展的資源類型
//PHP7
var_dump(is_resource(curl_init())); // true
//PHP8
var_dump(is_resource(curl_init())); // false
var_dump(is_object(curl_init())); // true
任何個(gè)人或團(tuán)體,未經(jīng)允許禁止轉(zhuǎn)載本文:《PHP8正式版發(fā)布,帶來了注解和JIT》,謝謝合作!
總結(jié)
以上是生活随笔為你收集整理的php 8 jit,PHP8正式版发布,带来了注解和JIT的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php定义枚举,PHP中Enum(枚举)
- 下一篇: Java键盘交互设计输入法,输入法中暖心