Keluaran bahasa pengaturcaraan PHP 7.4

Selepas setahun pembangunan dibentangkan keluaran bahasa pengaturcaraan PHP 7.4Cawangan baharu termasuk beberapa ciri baharu, serta beberapa perubahan yang tidak serasi.

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 definisi fungsi "fn(parameter_list) => expr" dengan pengikatan skop nilai. Contohnya, "fn($x) => $x + $y" bersamaan 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 dikekalkan, dan jika tidak ditakrifkan nilai "b" diberikan);
  • Terhad peluang mengekalkan hierarki warisan jenis dalam jenis nilai pulangan yang diperoleh daripada mereka atau kemungkinan mengubah hierarki jenis asal kepada sebaliknya dalam jenis argumen 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 {}
    }

  • Operator pembongkaran 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 persembahan visual nombor besar dengan pemisah dalam literal angka (1_000_000_00);
  • Sokongan pautan yang lemah, yang membenarkan rujukan kepada objek dipelihara, tetapi tidak menghalang penyingkiran objek yang berkaitan oleh pemungut sampah;
  • baru mekanisme siri objek (gabungan Serializable dan __sleep()/__wakeup()), menggantikan antara muka Serializable, yang akan diisytiharkan usang;

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

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

  • Membenarkan pengecualian dibuang daripada kaedah __toString();
  • Menambah sokongan untuk pramuat cache kod objek. Parameter baharu telah ditambahkan untuk konfigurasi.
    opcache.pramuat, yang membolehkan anda menentukan skrip PHP yang akan disusun dan dijalankan apabila pelayan bermula. Skrip ini boleh memuatkan opcode fail lain dengan memasukkannya terus atau menggunakan fungsi opcache_compile_file();
  • Fungsi crc32c telah ditambahkan pada sambungan Hash untuk mengira jumlah semak menggunakan polinomial Castagnoli;
  • Fungsi password_hash() telah dikemas kini untuk menyokong 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 beroperasi bukan pada bait tetapi pada kedudukan aksara dalam rentetan berbilang bait;
  • Fungsi strip_tags() kini membolehkan anda menghantar tatasusunan nama tag, iaitu bukannya strip_tags($str, ' ') anda kini boleh menentukan strip_tags($str, ['a', 'p']);
  • proc_open() membenarkan penyenaraian operan dalam tatasusunan dan bukannya menentukan rentetan untuk dijalankan, dan juga melaksanakan keupayaan untuk mengubah hala strim dan menyokong deskriptor fail null;

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

    // Seperti 2>&1 dalam cangkerang
    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 telah dialih keluar daripada pengedaran asas. Sambungan ini kini diedarkan melalui PECL;
  • Dipindahkan ke kategori usang 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, pilihan konfigurasi allow_url_include dan menggunakan array_key_exists() pada objek.

    Fungsi get_magic_quotes_gpc(), get_magic_quotes_runtime() telah diisytiharkan tidak digunakan lagi.
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Memberi amaran tentang menggunakan ciri yang tidak digunakan apabila cuba memproses aksara tidak sah dalam fungsi
    base_convert(), bindec(), octdec(), dan hexdec(), dan apabila menentukan corak bukan rentetan dalam mb_ereg_replace().

Sumber: opennet.ru

Tambah komen