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

Sau một năm phát triển, ngôn ngữ lập trình PHP 8.3 đã đượ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 thay đổi chính trong PHP 8.3:

  • Trong quá trình nhân bản lớp, có thể khởi tạo lại các thuộc tính bằng thuộc tính “chỉ đọc”. Việc ghi đè các thuộc tính chỉ đọc chỉ được phép bên trong hàm “__clone”: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // được phép mặc dù thuộc tính "createdAt" ở chế độ chỉ đọc. } }
  • Khả năng sử dụng các hằng số có chỉ báo kiểu trong các lớp, đặc điểm và kiểu liệt kê đã được cung cấp: class Foo { const string BAR = 'baz'; }
  • Đã thêm hỗ trợ cho thuộc tính “#[Override]”, nhờ đó nhà phát triển có thể thông báo cho trình thông dịch rằng phương thức được đánh dấu sẽ ghi đè một số phương thức gốc. Nếu không có ghi đè, trình thông dịch sẽ hiển thị lỗi.
  • Đã thay đổi cách xử lý các giá trị âm dưới dạng chỉ mục mảng. Ví dụ: khi thêm một phần tử có số “-5” vào một mảng trống và thêm một phần tử khác, trước đây phần tử thứ hai được lưu với chỉ số “0”, nhưng bắt đầu từ phiên bản PHP 8.3 nó sẽ được lưu với chỉ số “-4” . $ mảng = []; $array[-5] = 'a'; $array[] = 'b'; var_export ($ mảng); // Đã là mảng (-5 => 'a', 0 => 'b') // Trở thành mảng (-5 => 'a', -4 => 'b')
  • Đã thêm khả năng tạo các lớp ẩn danh ở chế độ chỉ đọc: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Đã thêm hàm json_validate() để kiểm tra nhanh xem chuỗi có ở định dạng JSON mà không cần thực hiện thao tác giải mã hay không. json_validate(chuỗi $json, int $độ sâu = 512, int $flags = 0): bool
  • Các phương thức mới đã được thêm vào lớp Randomizer, lớp này cung cấp API cấp cao để tạo các số và chuỗi giả ngẫu nhiên: getBytesFromString để tạo một chuỗi có kích thước nhất định, sử dụng các ký tự có trong một chuỗi khác theo thứ tự ngẫu nhiên; getFloat và nextFloat để tạo số dấu phẩy động ngẫu nhiên nằm trong phạm vi đã chỉ định.
  • Đã thêm khả năng truy xuất các hằng số bằng cú pháp lớp động: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Trước đây, để lấy hằng số BAR, bạn phải gọi constant(Foo::class . '::' . $name); // Bây giờ chỉ cần chỉ định Foo::{$name};
  • Đã thêm việc tạo các ngoại lệ riêng lẻ (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) trong trường hợp có sự cố phát sinh trong các thao tác làm việc với ngày và giờ.
  • Cải thiện việc xử lý các lỗi xảy ra trong quá trình phân tích cú pháp dữ liệu được tuần tự hóa trong hàm unserialize(). Trong trường hợp có sự cố, unserialize() hiện phát hành E_WARNING thay vì E_NOTICE.
  • Những thay đổi đã được thực hiện đối với hàm range(). Một ngoại lệ được tạo ra khi cố gắng truyền các đối tượng, tài nguyên hoặc mảng trong các biến xác định ranh giới phạm vi, cũng như khi chỉ định giá trị âm trong tham số $step hoặc giá trị không xác định trong bất kỳ tham số nào. Cung cấp đầu ra của danh sách các ký tự khi chỉ định chuỗi thay vì số (ví dụ: "phạm vi ('5', 'z')").
  • Đã thay đổi hành vi của các đặc điểm với thuộc tính tĩnh, hiện ghi đè các thuộc tính tĩnh được kế thừa từ lớp cha.
  • Đã thêm cài đặt để bảo vệ chống tràn ngăn xếp. Các lệnh zend.max_allowed_stack_size và zend.reserved_stack_size đã được thêm vào tệp ini, xác định kích thước ngăn xếp dự trữ và cho phép tối đa. Chương trình sẽ gặp sự cố khi sắp hết ngăn xếp, khi ngăn xếp đầy nhiều hơn chênh lệch giữa giá trị zend.max_allowed_stack_size và zend.reserved_stack_size (quá trình thực thi sẽ dừng trước khi xảy ra lỗi phân đoạn). Theo mặc định, giá trị zend.max_allowed_stack_size được đặt thành 0 (0—kích thước được xác định tự động; để tắt giới hạn, bạn có thể đặt giá trị này thành -1).
  • Đã thêm các hàm POSIX mới posix_sysconf(), posix_pathconf(), posix_fpathconf() và posix_eaccess().
  • Hàm mb_str_pad đã được thêm vào, một hàm tương tự của hàm chuỗi str_pad(), được thiết kế để hoạt động với các mã hóa nhiều byte như UTF-8.
  • Cho phép bạn tạo các bao đóng từ các phương thức và chuyển các đối số được đặt tên cho các bao đóng đó. $test = Thử nghiệm mới(); $closure = $test->magic(…); $closure(a: 'xin chào', b: 'thế giới');
  • Đã thay đổi hành vi khi xử lý mức độ hiển thị của các hằng số trong giao diện. giao diện I { public const FOO = 'foo'; } lớp C triển khai I { private const FOO = 'foo'; }
  • Các hàm array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() và proc_get_status() đã được mở rộng.
  • Khả năng chuyển giá trị $widths âm tới mb_strimwidth() không còn được dùng nữa. Hằng số NumberFormatter::TYPE_CURRENCY đã bị xóa. Hỗ trợ gọi hàm ldap_connect() với hai tham số $host và $port đã bị ngừng. Cài đặt opcache.consistency_checks đã bị xóa.

Nguồn: opennet.ru

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