Phát hành ngôn ngữ lập trình PHP 8.2

Sau một năm phát triển, ngôn ngữ lập trình PHP 8.2 đã được ra mắt. Nhánh mới bao gồm một loạt tính năng mới cũng như một số thay đổi làm ảnh hưởng đến tính tương thích.

Những cải tiến chính trong PHP 8.2:

  • Đã thêm khả năng đánh dấu một lớp là chỉ đọc. Các thuộc tính trong các lớp như vậy chỉ có thể được đặt một lần, sau đó chúng không thể thay đổi được. Trước đây, các thuộc tính lớp riêng lẻ có thể được đánh dấu là chỉ đọc, nhưng bây giờ bạn có thể bật chế độ này cho tất cả thuộc tính lớp cùng một lúc. Việc chỉ định cờ "chỉ đọc" ở cấp lớp cũng chặn các thuộc tính được thêm động vào lớp. lớp chỉ đọc Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'sai'; // Lỗi: Không thể tạo thuộc tính động Post::$unknown
  • Đã thêm các loại riêng biệt “true”, “false” và “null”, chỉ có thể nhận một giá trị hợp lệ và được sử dụng, ví dụ: để trả về một hàm có cờ chấm dứt lỗi hoặc giá trị trống. Trước đây, “true”, “false” và “null” chỉ có thể được sử dụng kết hợp với các loại khác (ví dụ: “string|false”), nhưng bây giờ chúng có thể được sử dụng riêng biệt: function AlwaysFalse(): false { return false ; }
  • Cung cấp khả năng lọc các tham số nhạy cảm trong đầu ra theo dõi ngăn xếp khi xảy ra lỗi. Việc cắt bỏ một số thông tin nhất định có thể cần thiết khi thông tin về lỗi xảy ra được tự động gửi đến các dịch vụ của bên thứ ba nhằm theo dõi sự cố và thông báo cho nhà phát triển về chúng. Ví dụ: bạn có thể loại trừ các tham số bao gồm tên người dùng, mật khẩu và biến môi trường khỏi quá trình theo dõi. kiểm tra hàm( $foo, #[\SensitiveParameter] $password, $baz ) { ném ngoại lệ mới('Error'); } test('foo', 'mật khẩu', 'baz'); Lỗi nghiêm trọng: Ngoại lệ chưa được bắt: Lỗi trong test.php:8 Dấu vết ngăn xếp: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} được đưa vào test.php trên dòng 8
  • Được phép xác định các hằng số trong các đặc điểm (đặc điểm, cơ chế sử dụng lại mã). Các hằng số được xác định trong một đặc điểm có thể được truy cập thông qua lớp sử dụng đặc điểm đó (nhưng không thông qua tên đặc điểm). đặc điểm Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Lỗi nghiêm trọng } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Đã thêm khả năng chỉ định các loại ở dạng chuẩn phân biệt (DNF, Biểu mẫu chuẩn phân biệt), cho phép bạn kết hợp sự kết hợp của các loại (tập hợp hai hoặc nhiều loại) và giao điểm của các loại (loại có giá trị nằm trong một số loại). loại đồng thời). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } trả về $entity; } }
  • Một tiện ích mở rộng mới “Ngẫu nhiên” đã được đề xuất với các hàm và lớp để tạo số và chuỗi giả ngẫu nhiên. Mô-đun này cung cấp giao diện hướng đối tượng, cho phép bạn chọn các công cụ khác nhau để tạo số giả ngẫu nhiên, bao gồm cả những công cụ phù hợp để sử dụng trong mật mã và cung cấp các chức năng phụ trợ, ví dụ: để trộn ngẫu nhiên các mảng và chuỗi, chọn các khóa mảng ngẫu nhiên, sử dụng đồng thời một số máy phát điện với trạng thái độc lập của riêng bạn. $rng = $is_production ? Random\Engine\Secure() mới : Random\Engine\Mt19937(1234); mới $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Đã thực hiện chuyển đổi trường hợp độc lập với miền địa phương. Các hàm như strtolow() và strtoupper() giờ đây luôn chuyển đổi kiểu chữ trong phạm vi ASCII như thể được đặt thành ngôn ngữ "C".
  • Đã thêm các chức năng mới: mysqli_execute_query, Curl_upkeep, Memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, Natri_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Đã thêm các phương thức mới: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Khả năng tạo động các thuộc tính trong một lớp không còn được dùng nữa. Trong PHP 9.0, việc truy cập các thuộc tính không được xác định ban đầu trong lớp sẽ dẫn đến lỗi (ErrorException). Các lớp cung cấp phương thức __get và __set để tạo thuộc tính hoặc thuộc tính động trong stdClass sẽ tiếp tục hoạt động mà không có thay đổi, chỉ hỗ trợ công việc ngầm với các thuộc tính không tồn tại để bảo vệ nhà phát triển khỏi các lỗi ẩn. Để duy trì hoạt động của mã cũ, thuộc tính “#[AllowDynamicProperties]” được đề xuất, cho phép sử dụng các thuộc tính động.
  • Khả năng thay thế các giá trị biến thành chuỗi bằng cách sử dụng biểu thức "${var}" và ${(var)} đã không còn được dùng nữa. Hỗ trợ cho các thay thế "{$var}" và "$var" thường được sử dụng đã được giữ lại. Ví dụ: "Xin chào {$world}"; Được rồi "Xin chào $world"; Được rồi "Xin chào ${world}"; Không được dùng nữa: Việc sử dụng ${} trong chuỗi không được dùng nữa
  • Các phương thức gọi được hỗ trợ một phần không được dùng nữa có thể được gọi thông qua "call_user_func($callable)" nhưng không hỗ trợ gọi dưới dạng "$callable()": "self::method" "parent::method" "static" ::method " ["tự", "phương thức"] ["cha mẹ", "phương thức"] ["static", "phương thức"] ["Foo", "Bar::method"] [Foo mới, "Bar: :phương thức" ]
  • Lệnh error_log_mode đã được thêm vào cài đặt, cho phép bạn xác định chế độ truy cập vào nhật ký lỗi.

Nguồn: opennet.ru

Thêm một lời nhận xét