PHP7.4新增加了FFI擴(kuò)展功能,它可以讓我們通過php代碼,就可以直接訪問c語言函數(shù)和變量以及結(jié)構(gòu)體。
10年的全州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整全州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“全州網(wǎng)站設(shè)計(jì)”,“全州網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。GD庫擴(kuò)展新增加了TGA圖片的支持
SQLite3支持線上備份
OpenSSL版本支持TLS1.3
短閉包的支持
預(yù)加載的支持
自定義序列化
改進(jìn)類型差異
簡化Null合并運(yùn)算符
棄用短標(biāo)簽
數(shù)組支持展開運(yùn)算符
相信大家對(duì)此或多或少都已經(jīng)有所了解了。本文將為大家總結(jié)一下PHP7.4新增的十大特性,分別是支持從 __toString() 方法拋出異常;類型化屬性的支持;弱引用;箭頭函數(shù)的支持;預(yù)加載;新的自定義對(duì)象序列化機(jī)制;合并分配運(yùn)算符;數(shù)組表達(dá)式中的展開運(yùn)算符;為引用提供的反射以及協(xié)變量返回和協(xié)變量參數(shù)。下面我們一起來看看新特性的詳細(xì)總結(jié)。
1、支持從 __toString() 方法拋出異常
之前無法從 __toString 方法中拋出異常。原因是標(biāo)準(zhǔn)庫中的許多函數(shù)都執(zhí)行從對(duì)象到字符串的轉(zhuǎn)化,它們當(dāng)中并非所有的都準(zhǔn)備好正確的“處理”異常。作為該 RFC 的一部分,對(duì)代碼庫中的字符串轉(zhuǎn)換進(jìn)行了全面的審核,并取消了此限制。
2、類型化屬性的支持
在下一個(gè)版本引入類型化屬性可能被視為 PHP 最重要的特性更新之一。雖然之前不可能將聲明方法用于類變量和屬性(包括靜態(tài)屬性),但現(xiàn)在程序員能很輕松地進(jìn)行編碼,而無需創(chuàng)建特定的 getter 和 setter 方法。由于聲明類型(不包括 void 和 callable),你可以使用可為空(Nullable)類型,即 int、float、array、string、object、iterable、self、bool 和 parent。如果一位 web 開發(fā)者嘗試從類型中分配一個(gè)不相關(guān)的值,例如,聲明 name 變量為字符串類型,他或她就會(huì)接收到 TypeError 的報(bào)錯(cuò)。像箭頭函數(shù)一樣,類型化屬性也能讓 PHP 工程師寫出更簡短和清晰的代碼。
3、弱引用
在 PHP 7.4 中,弱引用類(WeakReference class)允許 web 開發(fā)者們將鏈接保存到不阻止其銷毀的對(duì)象中。請(qǐng)勿將弱引用類和弱引用擴(kuò)展混淆。由于這些特性,它們更容易實(shí)現(xiàn)類似緩存的結(jié)構(gòu)。請(qǐng)參考使用此類的示例:
$obj = new stdClass;
$weakref = WeakReference::create($obj);
var_dump($weakref->get());
unset($obj);
var_dump($weakref->get());
>
另外,請(qǐng)注意,你無法序列化弱引用。
4、箭頭函數(shù)的支持
由于匿名函數(shù)或閉包主要應(yīng)用于 JS 中,因此,他們?cè)?PHP 中似乎很啰嗦,他們的實(shí)現(xiàn)和程序的維護(hù)也會(huì)更復(fù)雜一些。引入對(duì)箭頭函數(shù)的支持使得 PHP 開發(fā)者大大簡化他們的代碼并且使語法更加簡潔。這樣,你代碼的可讀性和簡潔性會(huì)大大提高。看下面的例子。因此,如果是以前的話,你必須按以下代碼塊寫:
function cube($n){
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);
同樣,它也有可能展開同一數(shù)組多次。此外,由于可以在擴(kuò)展運(yùn)算符的前后添加普通元素,因此 PHP 開發(fā)人員將能夠在數(shù)組中使用其語法。
在 PHP 7.4 發(fā)布后,你就可以按如下的方法寫:
$a = [1, 2, 3, 4, 5];
$b = array_map(fn($n) => $n * $n * $n, $a);
print_r($b);
由于擁有了創(chuàng)建整齊、更短代碼的能力。web 開發(fā)過程將會(huì)更快,也節(jié)省了你的時(shí)間。
5、預(yù)加載
這個(gè)很酷新特性的主要目的是提升 PHP 7.4 的性能。簡而言之,預(yù)加載是在 OPcache[10] 中加載文件、框架和庫的過程,絕對(duì)是新版本的最佳補(bǔ)充。例如,如果你使用框架,則必須為每個(gè)請(qǐng)求下載并重新編譯其文件。在配置 OPcache 的時(shí)候,這些代碼文件首次參與請(qǐng)求處理,然后每次都檢查它們的更改。預(yù)加載使服務(wù)器可以將指定的代碼文件加載到共享內(nèi)存中。請(qǐng)務(wù)必注意,它們將始終可用于后續(xù)所有的請(qǐng)求,而無需檢查其他文件的改變。還值得一提的是,在預(yù)加載期間,PHP 還消除了不必要的包含,并解決了類依賴以及具有 Traits 和 Interfaces 等的鏈接。
6、新的自定義對(duì)象序列化機(jī)制
在 PHP 新的版本中,有兩種新的可用方法 serialize 和 unserialize。將 Serializable 接口的多功能性與實(shí)現(xiàn) sleep 和 wakeup 方法結(jié)合起來,這種序列化機(jī)制使得 PHP 開發(fā)者可以避免與已存在的方法產(chǎn)生一些自定義的問題。發(fā)現(xiàn)有關(guān) PHP 特性的更多信息。
7、合并分配運(yùn)算符
合并運(yùn)算符是 PHP 7.4 提供的另一個(gè)新功能。當(dāng)你需要將三元運(yùn)算符和 isset 方法一起使用時(shí)非常有用。如果它存在且不為空,那么就會(huì)返回第一個(gè)操作數(shù),否則就會(huì)返回第二個(gè)操作數(shù)。這就是個(gè)例子:
// 獲取 $_GET['user'] 的值,如果它不存在則返回 nobody
$username = $_GET['user'] ?? 'nobody';
// 這等價(jià)于:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// 鏈?zhǔn)胶喜ⅲ簩⒎祷?$_GET['user']、$_POST['user'] 以及 noboody 中第一個(gè)不為 NULL 的值
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
>
8、數(shù)組表達(dá)式中的展開運(yùn)算符
與 array_merge 相比,在 PHP 7.4 中,工程師們能在數(shù)組中使用展開運(yùn)算符。有兩個(gè)主要原因,首先,展開運(yùn)算符被認(rèn)為是一種語言結(jié)構(gòu),而 array_merge 是一個(gè)函數(shù),其次是針對(duì)常量數(shù)組“編譯時(shí)”的優(yōu)化。因此 PHP 7.4 的性能將會(huì)提升。
9、為引用提供的反射
類似于 symfony/var-dumper 之類的庫,嚴(yán)重依賴 Reflection API 來準(zhǔn)確羅列變量。原來,對(duì)于引用反射沒有很好的支持,這迫使這些庫只能依靠 hack 的方式來檢測引用。在 PHP 7.4 中添加了 ReflectionReference 類來解決此問題。
10、協(xié)變量返回和協(xié)變量參數(shù)
目前,PHP 中大多數(shù)是不變的參數(shù)類型和不變的返回類型,這帶來了一些約束。隨著協(xié)變量(類型從更具體到更通用)返回和協(xié)變量(類型從更通用到更具體)參數(shù)的引入,PHP 開發(fā)者們將能夠?qū)?shù)類型更改為超類型之一。
雖然php7.4的性能提升相對(duì)來說很小,但是可以看出,在功能增加的情況下,性能依然在穩(wěn)步提升。這些性能的提升,讓我們很期待,也很堅(jiān)信php8將會(huì)有更好的未來。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。