淺談PHP 8.2的更新進展
PHP 8.2 帶來了類型系統改進、只讀`readonly` 類別、敏感參數隱藏支援、新的隨機`random` 擴展,以及包括簡化和現代化PHP 在內的多項功能,下面一起來看一下,希望對大家有幫助。
推薦學習:《PHP影片教學》
PHP 8.2 帶來了型別系統改進、唯讀readonly
類別、敏感參數隱藏支援、新的隨機random
擴展,以及包括簡化和現代化PHP 在內的多項功能。
PHP 8.2 是 PHP 邁入現代化的重要里程碑。除了令人興奮的新功能和改進之外,PHP 8.2 透過棄用動態屬性支援、對 INI 配置值發出警告和修復一系列數組排序和字串轉換的遺留行為。
型別系統改進
PHP 8.2 解決了數個原有型別系統的短處與限制,讓 PHP 專案得以擁有較好的型別安全性。這包括新增對 true
類型的支持,並允許將 null
和 false
用作獨立類型,同時增加了對 DNF 類型的支援。
Disjoint Normal Form (DNF) 類型支援- 在PHP 8.2 中,開發者可以組合使用聯合
union
類型(PHP 8.0)和交集intersection
類型(PHP 8.1),繼而允許聲明更精確的參數、傳回和屬性類型。
function process((HTMLRequest & RequestInterface) | APIRequest $request) { // ... }
(HTMLRequest & RequestInterface) | APIRequest
類型宣告表示$request
必須是APIRequest
# 的範例,或者實作了HTMLRequest
和RequestInterface
。
另一方面,在加入了true
和false
獨立類型後,可以將固定傳回值的bool
類型變更為具體的類型。
function alwaysReturnsFalse(): false {} function alwaysReturnsNull(): null {} function alwaysReturnsTrue(): true {}
在過去,我們已經可以透過string|null
的形式來定義可以為空的參數,而在PHP 8.2 中,我們將可以直接使用null
作為一個獨立類型。
只讀readonly
類別
PHP 8.1 新增了唯讀屬性支持,唯讀型別只能在初始化時被賦值一次,其後的修改會被PHP阻止。
而 PHP 8.2 將唯讀屬性延申到唯讀類別。當一個類別被宣告為唯讀類別後,它的所有屬性都會被自動宣告為唯讀。此外,它還會確保只讀類別中的所有屬性都帶有類型聲明。
// PHP 8.2 readonly class User { public string $username; public int $uid; } // PHP 8.1 等效写法 class User { public readonly string $username; public readonly int $uid; }
全新隨機 random
擴充
綜觀 PHP 歷史,它支援了各種隨機數產生器(RNG)。每種生成器都具有不同的效能、使用場景和安全性。而 PHP 8.2 將所有 RNG 相關的功能重構成一個名為 random
新擴充。
random
擴充功能與現有的API 保持相容,同時提供相同的功能,因此rand
mt_rand
random_bytes
random_int
等函數可以繼續工作,沒有任何變化。但 random
擴充功能提供了全新的物件導向的 API 來產生具有模組化架構的隨機數,讓模擬 RNG 和提供新的 RNG 變得更加容易,使測試專案更加安全且便利。
Trait 中的常數
PHP 8.2 允許在 Trait 中定義常數。當然,你不能直接存取 Trait,但 Trait 中的常數會在被繼承時成為類別常數。
trait FooBar { const FOO = 'foo'; private const BAR = 'bar'; final const BAZ = 'baz'; final protected const QUX = 'qux'; } class Test { use FooBar; } echo Test::BAZ; // 'bar'
要注意的是,Trait 中的常數不可以和其他 Trait 或類別中的常數衝突。
支援隱藏敏感參數
PHP 8.2 新增了 #[\SensitiveParameter]
參數註解,用於在錯誤和堆疊資訊中隱藏實際值。
接受密碼、私鑰或其他敏感資訊的函數可以使用 #[\SensitiveParameter]
來隱藏特定值。如果發生錯誤或異常,對應的值會被替換為 \SensitiveParameterValue
物件。
PHP 的內建函數(如 password_hash
和 password_verify
)已使用 #[\SensitiveParameter]
參數註解。
- function passwordHash(string $password) { + function passwordHash(#[\SensitiveParameter] string $password) { debug_print_backtrace(); } passwordHash('hunter2');
array(1) { [0]=> array(4) { ["file"]=> string(38) "..." ["line"]=> int(9) ["function"]=> string(3) "foo" ["args"]=> array(1) { - [0]=> string(38) "hunter2" + [0]=> object(SensitiveParameterValue)#1 (0) {} } } }
新函數和類別
解析INI 容量ini_parse_quantity
ini_parse_quantity('256M'); // 268435456
保持CURL 連線curl_upkeep
PHP 8.2 Curl 擴充功能中的curl_upkeep
函數觸發底層Curl 函式庫運行必要的任務以保持Curl 連接處於活動狀態。此函數最常見的用例是透過定期呼叫 curl_upkeep
函數來保持 HTTP 持久連線 (Keep-Alive)。
获取加密密钥长度 openssl_cipher_key_length
在 PHP 8.2 OpenSSL 中,有一个名为 openssl_cipher_key_length
的新函数,它返回任何受支持的 OpenSSL 密码所需的密钥长度(以字节为单位)。
此功能消除了对 OpenSSL 密码操作所需密钥长度进行硬编码的需要。
openssl_cipher_key_length("CHACHA20-POLY1305"); // 32 openssl_cipher_key_length("AES-128-GCM"); // 16 openssl_cipher_key_length("AES-256-GCM"); // 32
重置记录的内存使用峰值 memory_reset_peak_usage
PHP 8.2 添加了一个名为 memory_reset_peak_usage
的新函数,用于重置由 memory_get_peak_usage
函数返回的峰值内存使用量。
这对于多次调用或迭代一个动作并且需要记录每次调用的峰值内存使用量的应用程序很有帮助。 如果没有 memory_reset_peak_usage
函数重置内存使用情况,memory_get_peak_usage
将会返回整个运行过程中的绝对峰值内存使用情况。
PHP 8.2 弃用情况
PHP 8.2 也带来了相当一部分弃用。当语法、函数或特性被弃用时,PHP 会发出弃用通知,该通知不会中断 PHP 应用,但会记录到错误日志中。
弃用动态属性
PHP 8.2 中最值得注意的弃用之一是它弃用了动态声明的类属性。虽然可以忽略错误,但建议在类中声明类属性,加上类型声明就更好了。
class User { public int $uid; } $user = new User(); $user->name = 'Foo';
Deprecated: Creation of dynamic property User::$name is deprecated in ... on
许多古老的 PHP 应用程序很可能会受到此更改的影响,因为它们在扩展时往往不声明类属性,或者随着变化多年来不断发展。
当然了,选择忽略或例外也是存在的:
匿名类及其子类(
stdClass
)具有
__get
和__set
魔术方法的类具有
#[AllowDynamicProperties]
注解的类
弃用 utf8_encode
和 utf8_decode
函数
PHP 8.2 终于弃用这两名字跟实际效果不一致的函数,虽然名为 utf8
但实际上是 Latin 1
(ISO-8859-1)。
大多数使用这些函数的 PHP 项目往往没有意识到这个问题。推荐的替代品包括 mbstring
、iconv
和 intl
扩展以提供更好的功能。
弃用 ${var}
字符串格式
PHP 一直支持使用 foo {$bar}
模式的字符串变量插值,以及将美元符号放在大括号外的替代语法 foo ${bar}
。
在 PHP 8.2 中,将美元符号放在花括号外的替代语法已弃用。
已弃用 | 推荐替代 |
---|---|
Hello ${name} | Hello {$name} |
Hello {var} | Hello {$$var} |
此外,PHP 8.2 还弃用了一些部分支持的 callable
模式和 Mbstring 扩展对 Base64、Uuencode、QPrint 和 HTML 实体编码的处理。
推荐学习:《PHP视频教程》
以上是淺談PHP 8.2的更新進展的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。
