PHP 8.2 編程語言發布

經過一年的開發,PHP 8.2 程式語言發布了。 新分支包含一系列新功能,以及一些破壞相容性的變更。

PHP 8.2 的主要改進:

  • 添加了將類標記為只讀的功能。 此類中的屬性只能設置一次,之後將無法更改。 以前,單個類屬性可以標記為只讀,但現在您可以立即為所有類屬性打開此模式。 在類級別指定“readonly”標誌還會阻止向類動態添加屬性。 readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = '錯誤'; // 錯誤:無法創建動態屬性 Post::$unknown
  • 新增了單獨的類型“true”、“false”和“null”,它們只能採用一個有效值,例如用於傳回帶有錯誤終止標誌或空值的函數。 以前,「true」、「false」和「null」只能與其他類型結合使用(例如「string|false」),但現在它們可以單獨使用: function alwaysFalse(): false { return false ; }
  • 提供了在發生錯誤時過濾堆棧跟踪輸出中的敏感設置的能力。 當有關發生的錯誤的信息自動發送到跟踪問題並向開發人員通知相關問題的第三方服務時,可能需要刪除某些信息。 例如,您可以從跟踪中排除包括用戶名、密碼和環境變量的參數。 函數測試( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } 測試('foo', '密碼', 'baz'); 致命錯誤:未捕獲異常:test.php 中出現錯誤:8 堆棧跟踪:#0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} 在test. php 中拋出在線8
  • 允許在特徵(trait,一種重複使用程式碼的機制)中定義常數。 特徵中定義的常數可以透過使用該特徵的類別來存取(但不能透過特徵名稱)。 特徵 Foo { 公共 const CONSTANT = 1; 公用函數 bar(): int { return self::CONSTANT; // 致命錯誤 } } class Bar { use Foo; var_dump(Bar::CONSTANT); // 1
  • 新增了在析取範式(DNF,Disjunctive Normal Form)中指定類型的功能,它允許您組合類型的並集(兩個或多個類型的集合)和類型的交集(其值屬於多個類型的類型)同時鍵入)。 類別 Foo { 公用函數 bar((A&B)|null $entity) { if ($entity === null) { return null; } 返回$實體; } }
  • 提出了一個新的擴展“Random”,其中包含用於產生偽隨機數和序列的函數和類別。 此模組提供物件導向的接口,可讓您選擇不同的引擎來產生偽隨機數,包括那些適合在密碼學中使用的引擎,並提供輔助功能,例如隨機混合數組和字串、選擇隨機數組密鑰、同時使用多個具有自己獨立狀態的生成器。 $rng = $is_生產? 新的隨機\引擎\安全():新的隨機\引擎\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • 實現了與區域設置無關的大小寫轉換。 像 strtolower() 和 strtoupper() 這樣的函數現在總是轉換 ASCII 範圍內字符的大小寫,就像將語言環境設置為“C”時一樣。
  • 新增了新函數:mysqli_execute_query、curl_upkeep、memory_reset_peak_usage、ini_parse_quantity、libxml_get_external_entity_loader、sodium_crypto_stream_xchacha20_xor_ic、openssl_cipher_key_length。
  • 新增了新方法:mysqli::execute_query、ZipArchive::getStreamIndex、ZipArchive::getStreamName、ZipArchive::clearError、ReflectionFunction::isAnonymous、ReflectionMethod::hasPrototype。
  • 在類別中動態建立屬性的功能已被棄用。 在 PHP 9.0 中,存取類別中最初未定義的屬性將導致錯誤 (ErrorException)。 提供 __get 和 __set 方法來建立屬性的類,或 stdClass 中的動態屬性將繼續工作而無需更改,僅支援使用不存在的屬性進行隱式工作,以保護開發人員免受隱藏錯誤的影響。 為了保留舊程式碼的工作,建議使用「#[AllowDynamicProperties]」屬性,允許使用動態屬性。
  • 使用“${var}”和${(var)}”表達式將變量值替換為字符串的功能已被棄用。 保留了對常用“{$var}”和“$var”替換的支持。 例如:“你好{$world}”; 好的“你好$world”; 好的“你好${world}”; 已棄用:已棄用在字符串中使用 ${}
  • 可以通過“call_user_func($callable)”調用的部分支持的可調用對像已被棄用,但不支持以“$callable()”形式調用:“self::method”“parent::method”“static : :方法" ["self", "方法"] ["父級", "方法"] ["靜態", "方法"] ["Foo", "Bar::method"] [new Foo, "Bar: :method ”]
  • error_log_mode 指令已新增至設定中,可讓您確定錯誤日誌的存取模式。

來源: opennet.ru

添加評論