Keluaran bahasa pengaturcaraan PHP 7.4

Selepas setahun pembangunan dibentangkan keluaran bahasa pengaturcaraan PHP 7.4. Cawangan baharu ini termasuk satu siri ciri baharu, serta beberapa perubahan yang memecahkan keserasian.

kunci penambahbaikan dalam PHP 7.4:

  • Sifat ditaip - sifat kelas kini boleh memasukkan pengisytiharan jenis, contohnya:

    Pengguna kelas {
    public int $id;
    rentetan awam $nama;
    }

  • Disingkatkan sintaks untuk mentakrifkan fungsi "fn(parameter_list) => expr" dengan pengikatan skop mengikut nilai. Sebagai contoh, β€œfn($x) => $x + $y” adalah sama dengan β€œ$fn2 = function ($x) use ($y) {return $x + $y;}”);
  • Pengendali tugasan ringkas "??=" yang boleh digunakan untuk mentakrifkan nilai lalai ("a ??= b" adalah serupa dengan "a = a ?? b", jika "a" ditakrifkan nilainya disimpan, dan jika tidak ditakrifkan ia diberi nilai "b" );
  • Terhad peluang mengekalkan hierarki warisan jenis dalam jenis pulangan terbitan, atau keupayaan untuk membalikkan hierarki jenis asal dalam jenis hujah terbitan (kovarians jenis pulangan dan kontravarian jenis hujah). Pembinaan berikut kini boleh digunakan dalam PHP:

    kelas A {}
    kelas B memanjangkan A {}

    Pengeluar kelas {
    kaedah fungsi awam(): A {}
    }
    kelas ChildProducer memanjangkan Producer {
    kaedah fungsi awam(): B {}
    }

  • Membongkar operator di dalam tatasusunan β€œβ€¦$var”, membenarkan melakukan penggantian tatasusunan sedia ada apabila menentukan tatasusunan baharu;

    $bahagian = ['epal', 'pir'];
    $buah = ['pisang', 'oren', ...$bahagian, 'tembikai'];
    // ['pisang', 'oren', 'epal', 'pir', 'tembikai'];

  • Peluang perwakilan visual nombor besar dengan pembatas dalam literal angka (1_000_000_00);
  • Sokongan pautan yang lemah, yang membolehkan anda mengekalkan rujukan kepada objek, tetapi tidak menghalang pemungut sampah daripada memadamkan objek yang berkaitan;
  • baru mekanisme siri objek (gabungan Serializable dan __sleep()/__wakeup()), yang menggantikan antara muka Serializable, yang akan ditamatkan;

    // Mengembalikan tatasusunan yang mengandungi semua keadaan objek;
    fungsi awam __serialize(): tatasusunan;

    // Mengembalikan keadaan objek daripada tatasusunan
    fungsi awam __unserialize(array $data): void;

  • Dibenarkan untuk membuang pengecualian daripada kaedah __menjalin();
  • Menambah sokongan untuk pramuat cache kod objek. Parameter tambahan untuk tetapan
    opcache.pramuat, di mana anda boleh menentukan skrip PHP yang akan disusun dan dijalankan apabila pelayan bermula. Skrip ini boleh memuatkan opcode fail lain melalui kemasukan langsungnya atau menggunakan fungsi opcache_compile_file();

  • Menambahkan fungsi crc32c pada sambungan Hash untuk mengira jumlah semak menggunakan polinomial Castagnoli;
  • Menambah sokongan kepada fungsi password_hash() untuk kaedah pencincangan kata laluan argon2i dan argin2id, dalam pelaksanaan perpustakaan Sodium, jika PHP dibina tanpa libargon;
  • Menambah fungsi mb_str_split(), serupa dengan str_split(), tetapi tidak beroperasi dengan bait tetapi dengan kedudukan aksara dalam rentetan berbilang bait;
  • Fungsi strip_tags() kini mempunyai keupayaan untuk menghantar tatasusunan dengan nama tag, i.e. bukannya strip_tags($str, β€˜β€™) anda kini boleh menentukan strip_tags($str, [β€˜a’, β€˜p’]);
  • proc_open() membenarkan operan disenaraikan dalam tatasusunan dan bukannya rentetan untuk dijalankan, dan ia juga menyediakan pengalihan benang dan sokongan untuk deskriptor fail null;

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

    // Seperti 2>&1 dalam shell
    proc_open($cmd, [1 => [β€˜paip’, β€˜w’], 2 => [β€˜redirect’, 1]], $pipes);

    // seperti 2>/dev/null atau 2>nul dalam shell
    proc_open($cmd, [1 => ['paip', 'w'], 2 => ['null']], $paip);

  • Sambungan Firebird/Interbase, Recode dan WDDX dikecualikan daripada pengedaran asas. Sambungan ini kini diedarkan melalui PECL;
  • Dipindahkan ke kategori ketinggalan zaman ciri seperti pengendali ternary bersarang tanpa kurungan, mengakses elemen tatasusunan dan rentetan menggunakan pendakap kerinting (β€œ$var{$idx}”), fungsi is_real() dan menghantar ke nyata, menggunakan kata kunci induk tanpa kelas induk, parameter allow_url_include konfigurasi , menggunakan array_key_exists() pada objek.

    Fungsi get_magic_quotes_gpc(), get_magic_quotes_runtime(), dan
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Amaran tentang penggunaan ciri usang telah disediakan apabila cuba memproses simbol yang salah dalam fungsi
    base_convert(), bindec(), octdec() dan hexdec(), dan apabila menentukan corak bukan rentetan dalam mb_ereg_replace().

Sumber: opennet.ru

Tambah komen