PHP 7.4 計劃于2019年11月28日發(fā)布。WordPress 5.3也將包含一些針對已棄用功能的提交。

大多數(shù)WordPress插件和主題開發(fā)人員不太可能在一段時間內(nèi)使用新的PHP 7.4功能,除非對環(huán)境可以進行一定程度控制的設(shè)置上進行工作。由于WordPress不愿意將最低PHP版本提高到最新的受支持版本,因此使用新功能可能需要幾年的時間。但是,開發(fā)人員應(yīng)確保其插件和主題與PHP 7.4兼容。跟上當(dāng)前功能也是一種很好的做法。
WordPress 5.2 將最低要求提高到PHP 5.6,并推薦使用 PHP 7.3。以下是WordPress安裝的當(dāng)前PHP使用情況統(tǒng)計信息的情況:
- PHP 7.3 – 9.6%
- PHP 7.2 – 22.2%
- PHP 7.1 – 13.5%
- PHP 7.0 – 14.9%
- PHP 5.6 – 25.7%
當(dāng)前,PHP 7.2和7.3是唯一獲得有效支持的版本。PHP將在12月1日停止對7.1版的安全支持。
新功能
PHP 7.4包含許多新功能,這些新功能將使編寫代碼更加容易。以下是對WordPress插件和主題作者可能有用的一些功能的簡要概述。
類型屬性
PHP在5.0中首次引入了類型提示,并不斷改進該功能。PHP 7.0引入了返回類型聲明。PHP 7.4使它更上一層樓,并允許開發(fā)人員為類屬性聲明類型。這使開發(fā)人員可以確保分配給特定屬性的數(shù)據(jù)類型始終是該數(shù)據(jù)??類型。
在下面的示例中,$id屬性只能分配一個整數(shù),而$title屬性只能分配一個字符串。如果聲明了嚴(yán)格的類型,嘗試分配錯誤的數(shù)據(jù)類型將導(dǎo)致致命錯誤。否則,PHP會將值強制轉(zhuǎn)換為正確的類型。
class Event {
public int $id;
public string $title;
}
箭頭功能
許多開發(fā)人員一直在呼吁使用類似于JavaScript的箭頭功能。它們非常好用。但是,PHP的箭頭功能(也稱為“短閉包”)略有??不同。PHP 7.4引入了fn關(guān)鍵字(現(xiàn)在是保留關(guān)鍵字)。短閉包只能包含一個表達式,沒有return關(guān)鍵字。它們的功能不如JavaScript下的強大,但是它們確實為某些情況提供了快速的解決方案。
例如,以下代碼片段顯示了兩種不同的方法,這些方法可以根據(jù)一組用戶對象構(gòu)建一組用戶電子郵件。
// 舊方式,但還可用
$value = array_map( function( $user ) {
return $user->user_email;
}, $users );
// 新方式
$value = array_map( fn( $user ) => $user->user_email, $users );
在數(shù)組內(nèi)部解包
參數(shù)解包是PHP 5.6引入的,因此對于WordPress領(lǐng)域的許多開發(fā)人員來說,這仍然可能是陌生的領(lǐng)域。在我的某些項目中,這是非常寶貴的功能。
PHP 7.4 允許開發(fā)人員在數(shù)組中解包數(shù)組。這應(yīng)該比array_merge()散布運算符(...)是一種語言構(gòu)造而不是一個函數(shù)要快得多。
看下下面的示例,該示例在較大的顏色數(shù)組中注入兩種顏色的數(shù)組。
$colors_a = [ 'green', 'blue' ];
$colors_b = [ 'red', ...$colors_a, 'yellow', 'purple' ];
// [ 'red', 'green', 'blue', 'yellow', 'purple' ];
空合并分配運算符
空合并賦值運算符是將isset()檢查與三元運算符組合在一起的簡便方法。
以下示例顯示了如何檢查$product['id']變量。如果已設(shè)置,則什么也不做。否則,在右側(cè)分配它的值。您可以看到PHP版本之間代碼的演變。用7.4編寫要簡單得多。
// Pre-PHP 7.0.
$product['id'] = isset( $product['id'] ) ? $product['id'] : 0;
// PHP 7.0.
$product['id'] = $product['id'] ?? 0;
// PHP 7.4.
$product['id'] ??= 0;
不推薦使用的功能
PHP 7.4將棄用某些功能。插件和主題作者可以查閱完整列表,以確定是否應(yīng)更新任何過時的代碼。我挑選了過去幾年在插件和主題代碼中看到的一些項目。在當(dāng)前代碼庫中,大多數(shù)其他不推薦使用的功能不太可能。
沒有括號的嵌套三元運算符
嵌套三元運算符通常是開發(fā)人員應(yīng)避免的東西。說真的,只是不要寫它們。它們很難遵循,并且由于人為錯誤而易于出錯。但是,如果您要謹(jǐn)慎行事并放棄好的建議,請至少使用括號。PHP 7.4不建議使用不帶括號的嵌套三元組。
// 不好!已棄用
$value = $a ? $b : $c ? $d : $e;
// 好
$value = ( $a ? $b : $c ) ? $d : $e;
// 好
$value = $a ? $b : ( $c ? $d : $e );
在對象上使用 array_key_exists()
開發(fā)人員不應(yīng)在對象上使用array_key_exists(),因為對象不是數(shù)組。而是使用更合適的property_exists()函數(shù)或isset()。
// 不好,已棄用
if ( array_key_exists( $property, $object ) ) {}
// 好
if ( property_exists( $object, $property ) ) {}
// 好
if ( isset( $object->$property ) ) {}
帶有花括號的數(shù)組和字符串偏移量訪問
使用花括號進行數(shù)組和字符串偏移量訪問有點稀少,但是我已經(jīng)看到了幾次。確保您使用的方括號[],而不是的大括號{}。
// 不好,已棄用
$value = $a{ $key };
// 好
$value = $a[ $key ];
聲明:文本內(nèi)容出自 https://wptavern.com/first-look-at-php-7-4-for-wordpress-developers ,由 WordPress大學(xué) 翻譯整理,轉(zhuǎn)載請保留本聲明和網(wǎng)址!




