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

Sau một năm phát triển trình bày phát hành ngôn ngữ lập trình PHP 7.4. 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.

Chìa khóa cải tiến trong PHP 7.4:

  • Thuộc tính đã nhập - Thuộc tính lớp bây giờ có thể bao gồm các khai báo kiểu, ví dụ:

    lớp Người dùng {
    int công khai $id;
    chuỗi công khai $name;
    }

  • Viết tắt cú pháp xác định hàm “fn(parameter_list) => expr” với ràng buộc phạm vi theo giá trị. Ví dụ: “fn($x) => $x + $y” tương tự như “$fn2 = function ($x) use ($y) {return $x + $y;}”);
  • Toán tử gán tốc ký "??=" có thể được sử dụng để xác định giá trị mặc định ("a ??= b" tương tự như "a = a ?? b", nếu "a" được xác định thì giá trị của nó sẽ được lưu trữ và nếu không được xác định thì giá trị đó sẽ được lưu trữ được gán giá trị "b" );
  • Giới hạn cơ hội duy trì hệ thống phân cấp kế thừa của các loại trong các kiểu trả về dẫn xuất hoặc khả năng đảo ngược hệ thống phân cấp của các loại ban đầu trong các loại đối số dẫn xuất (hiệp phương sai kiểu trả về và kiểu đối số trái ngược nhau). Các cấu trúc sau hiện có thể được sử dụng trong PHP:

    hạng A {}
    lớp B mở rộng A {}

    lớp Nhà sản xuất {
    phương thức hàm công khai(): A {}
    }
    lớp ChildProducer mở rộng Nhà sản xuất {
    phương thức hàm công khai(): B {}
    }

  • Giải nén toán tử bên trong mảng “…$var”, cho phép thực hiện thay thế các mảng hiện có khi xác định một mảng mới;

    $parts = ['táo', 'quả lê'];
    $fruits = ['chuối', 'cam', …$phần, 'dưa hấu'];
    // ['chuối', 'cam', 'táo', 'lê', 'dưa hấu'];

  • Cơ hội biểu diễn trực quan các số lớn bằng dấu phân cách bằng chữ số (1_000_000_00);
  • Hỗ trợ liên kết yếu, cho phép bạn giữ lại một tham chiếu đến một đối tượng, nhưng không chặn trình thu gom rác xóa đối tượng liên quan;
  • mới cơ chế tuần tự hóa đối tượng (sự kết hợp của Serializable và __sleep()/__wakeup()), thay thế giao diện Serializable, giao diện này sẽ không được dùng nữa;

    // Trả về một mảng chứa tất cả các trạng thái của đối tượng;
    hàm công khai __serialize(): mảng;

    // Khôi phục trạng thái của một đối tượng từ một mảng
    hàm công khai __unserialize(array $data): void;

  • Được phép ném ngoại lệ từ một phương thức __toString ();
  • Đã thêm hỗ trợ tải trước bộ đệm mã đối tượng. Đã thêm tham số để cài đặt
    opcache.preload, qua đó bạn có thể chỉ định một tập lệnh PHP sẽ được biên dịch và chạy khi máy chủ khởi động. Tập lệnh này có thể tải opcode của các tệp khác thông qua việc đưa trực tiếp chúng vào hoặc sử dụng hàm opcache_compile_file();

  • Đã thêm hàm crc32c vào tiện ích mở rộng Hash để tính tổng kiểm tra bằng đa thức Castagnoli;
  • Đã thêm hỗ trợ cho hàm pass_hash() cho các phương thức băm mật khẩu argon2i và argin2id, khi triển khai thư viện Natri, nếu PHP được xây dựng không có libargon;
  • Đã thêm hàm mb_str_split(), tương tự như str_split(), nhưng hoạt động không phải với byte mà với vị trí ký tự trong chuỗi nhiều byte;
  • Hàm Strip_tags() hiện có khả năng truyền một mảng có tên thẻ, tức là. thay vì Strip_tags($str, ' ') giờ đây bạn có thể chỉ định Strip_tags($str, ['a', 'p']);
  • proc_open() cho phép các toán hạng được liệt kê trong một mảng, thay vì chạy một chuỗi, đồng thời cung cấp khả năng chuyển hướng luồng và hỗ trợ cho bộ mô tả tệp null;

    proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

    // Giống như 2>&1 trong shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // như 2>/dev/null hoặc 2>nul trong shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Các phần mở rộng Firebird/Interbase, Recode và WDDX bị loại khỏi bản phân phối cơ bản. Các tiện ích mở rộng này hiện được phân phối thông qua PECL;
  • Đã chuyển sang danh mục lỗi thời các tính năng như toán tử ba ngôi lồng nhau không có dấu ngoặc đơn, truy cập các phần tử và chuỗi của mảng bằng dấu ngoặc nhọn (“$var{$idx}”), hàm is_real() và chuyển thành số thực, sử dụng từ khóa gốc không có lớp cha, cấu hình tham số allow_url_include , sử dụng array_key_exists() trên các đối tượng.

    Các hàm get_magic_quotes_gpc(), get_magic_quotes_runtime() và
    hebrevc(), Convert_cyr_string(), money_format(), ezmlm_hash(), Restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Cảnh báo về việc sử dụng tính năng lỗi thời đã được đưa ra khi cố gắng xử lý các ký hiệu không chính xác trong hàm
    base_convert(), bindec(), octdec() và hexdec() và khi chỉ định mẫu không phải chuỗi trong mb_ereg_replace().

Nguồn: opennet.ru

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