Rilis bahasa pemrograman PHP 7.4

Setelah satu tahun pembangunan disajikan rilis bahasa pemrograman PHP 7.4. Cabang baru ini mencakup serangkaian fitur baru, serta beberapa perubahan yang merusak kompatibilitas.

Kunci perbaikan di PHP 7.4:

  • Properti yang Diketik - properti kelas sekarang dapat menyertakan deklarasi tipe, misalnya:

    Pengguna kelas {
    int publik $id;
    string publik $nama;
    }

  • Disingkat sintaks untuk mendefinisikan fungsi β€œfn(parameter_list) => expr” dengan cakupan yang diikat berdasarkan nilai. Misalnya, β€œfn($x) => $x + $y” dianalogikan dengan β€œ$fn2 = function ($x) use ($y) {return $x + $y;}”);
  • Operator penugasan singkat "??=" yang dapat digunakan untuk mendefinisikan nilai default ("a ??= b" mirip dengan "a = a ?? b", jika "a" ditentukan nilainya disimpan, dan jika tidak ditentukan maka diberi nilai "b" );
  • Terbatas kesempatan mempertahankan hierarki pewarisan tipe dalam tipe pengembalian turunan, atau kemampuan untuk membalikkan hierarki tipe asli dalam tipe argumen turunan (kovarians tipe pengembalian dan kontravarian tipe argumen). Konstruksi berikut sekarang dapat digunakan di PHP:

    kelas A {}
    kelas B memperluas A {}

    kelas Produser {
    metode fungsi publik(): A {}
    }
    kelas ChildProducer memperluas Produser {
    metode fungsi publik(): B {}
    }

  • Membongkar operator di dalam array β€œβ€¦$var”, mengizinkan melakukan substitusi array yang ada saat mendefinisikan array baru;

    $bagian = ['apel', 'pir'];
    $buah = ['pisang', 'jeruk', …$bagian, 'semangka'];
    // ['pisang', 'jeruk', 'apel', 'pir', 'semangka'];

  • Kesempatan representasi visual dari bilangan besar dengan pembatas dalam literal numerik (1_000_000_00);
  • Dukungan tautan lemah, yang memungkinkan Anda menyimpan referensi ke suatu objek, tetapi tidak menghalangi pengumpul sampah untuk menghapus objek terkait;
  • Baru ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ serialisasi objek (kombinasi Serializable dan __sleep()/__wakeup()), yang menggantikan antarmuka Serializable, yang tidak akan digunakan lagi;

    // Mengembalikan array yang berisi semua status objek;
    fungsi publik __serialize(): array;

    // Mengembalikan status objek dari array
    fungsi publik __unserialize(array $data): batal;

  • Diizinkan untuk membuang pengecualian dari suatu metode __toString();
  • Menambahkan dukungan untuk memuat cache kode objek terlebih dahulu. Menambahkan parameter untuk pengaturan
    opcache.preload, yang melaluinya Anda dapat menentukan skrip PHP yang akan dikompilasi dan dijalankan saat server dimulai. Skrip ini dapat memuat opcode file lain melalui penyertaan langsungnya atau menggunakan fungsi opcache_compile_file();

  • Menambahkan fungsi crc32c ke ekstensi Hash untuk menghitung checksum menggunakan polinomial Castagnoli;
  • Menambahkan dukungan ke fungsi password_hash() untuk metode hashing kata sandi argon2i dan argin2id, dalam implementasi perpustakaan Sodium, jika PHP dibangun tanpa libargon;
  • Menambahkan fungsi mb_str_split(), mirip dengan str_split(), tetapi beroperasi bukan dengan byte tetapi dengan posisi karakter dalam string multi-byte;
  • Fungsi strip_tags() sekarang memiliki kemampuan untuk meneruskan array dengan nama tag, mis. alih-alih strip_tags($str, ' ') Anda sekarang dapat menentukan strip_tags($str, ['a', 'p']);
  • proc_open() memungkinkan operan untuk dicantumkan dalam array, bukan string untuk dijalankan, dan juga menyediakan pengalihan thread dan dukungan untuk deskriptor file null;

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

    // Suka 2>&1 di shell
    proc_open($cmd, [1 => ['pipa', 'w'], 2 => ['redirect', 1]], $pipa);

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

  • Ekstensi Firebird/Interbase, Recode dan WDDX tidak termasuk dalam distribusi dasar. Ekstensi ini sekarang didistribusikan melalui PECL;
  • Dipindahkan ke kategori usang fitur-fitur seperti operator ternary bersarang tanpa tanda kurung, mengakses elemen array dan string menggunakan kurung kurawal (β€œ$var{$idx}”), fungsi is_real() dan melakukan transmisi ke real, menggunakan kata kunci induk tanpa kelas induk, konfigurasi parameterallow_url_include , 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().

    Peringatan tentang penggunaan fitur usang telah diberikan ketika mencoba memproses simbol yang salah dalam fungsi
    base_convert(), bindec(), octdec() dan hexdec(), dan saat menentukan pola non-string di mb_ereg_replace().

Sumber: opennet.ru

Tambah komentar