Keluaran bahasa pengaturcaraan PHP 8.2

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

Penambahbaikan utama dalam PHP 8.2:

  • Menambah keupayaan untuk menandakan kelas sebagai baca sahaja. Sifat dalam kelas tersebut boleh ditetapkan sekali sahaja, selepas itu ia tidak akan tersedia untuk perubahan. Sebelum ini, sifat kelas individu boleh ditandakan baca sahaja, tetapi kini anda boleh menghidupkan mod ini untuk semua sifat kelas sekaligus. Menentukan bendera "baca sahaja" di peringkat kelas juga menyekat penambahan sifat dinamik pada kelas. kelas baca sahaja Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'salah'; // Ralat: Tidak boleh mencipta sifat dinamik Post::$unknown
  • Menambahkan jenis berasingan "true", "false" dan "null", yang boleh mengambil hanya satu nilai yang sah dan digunakan, sebagai contoh, untuk mengembalikan fungsi dengan bendera penamatan ralat atau nilai kosong. Sebelum ini, "true", "false" dan "null" hanya boleh digunakan bersama dengan jenis lain (contohnya, "string|false"), tetapi kini ia boleh digunakan secara berasingan: function alwaysFalse(): false { return false ; }
  • Dengan syarat keupayaan untuk menapis tetapan sensitif dalam output surih tindanan pada masa ralat. Memotong maklumat tertentu mungkin diperlukan apabila maklumat tentang ralat yang berlaku dihantar secara automatik kepada perkhidmatan pihak ketiga yang menjejaki masalah dan memaklumkan pembangun tentangnya. Sebagai contoh, anda boleh mengecualikan parameter daripada jejak yang termasuk nama pengguna, kata laluan dan pembolehubah persekitaran. ujian fungsi( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Ralat maut: Pengecualian Tidak Ditangkap: Ralat dalam test.php:8 Surih tindanan: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} dilemparkan dalam test.php dalam talian 8
  • Dibenarkan untuk menentukan pemalar dalam sifat (sifat, mekanisme untuk menggunakan semula kod). Pemalar yang ditakrifkan dalam sifat boleh diakses melalui kelas yang menggunakan sifat (tetapi bukan melalui nama sifat). trait Foo { public const CONSTANT = 1; bar fungsi awam(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Menambah keupayaan untuk menentukan jenis dalam bentuk normal disjungtif (DNF, Bentuk Normal Disjunctive), yang membolehkan anda menggabungkan gabungan jenis (koleksi dua atau lebih jenis) dan persilangan jenis (jenis yang nilainya berada di bawah beberapa jenis serentak). kelas Foo { bar fungsi awam((A&B)|null $entity) { if ($entity === null) { return null; } pulangkan $entity; } }
  • Sambungan baharu "Rawak" telah dicadangkan dengan fungsi dan kelas untuk menjana nombor dan jujukan rawak pseudo. Modul ini menyediakan antara muka berorientasikan objek, membolehkan anda memilih enjin yang berbeza untuk menjana nombor pseudo-rawak, termasuk yang sesuai untuk digunakan dalam kriptografi, dan menyediakan fungsi tambahan, contohnya, untuk mencampur tatasusunan dan rentetan secara rawak, memilih kekunci tatasusunan rawak, penggunaan serentak beberapa penjana dengan keadaan bebas anda sendiri. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Melaksanakan penukaran kes bebas tempatan. Fungsi seperti strtolower() dan strtoupper() kini sentiasa menukar kes aksara dalam julat ASCII, seperti apabila menetapkan tempat kepada "C".
  • Menambah fungsi baharu: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Menambah kaedah baharu: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Keupayaan untuk mencipta sifat secara dinamik dalam kelas telah ditamatkan. Dalam PHP 9.0, mengakses sifat yang pada mulanya tidak ditakrifkan dalam kelas akan mengakibatkan ralat (ErrorException). Kelas yang menyediakan kaedah __get dan __set untuk mencipta sifat, atau sifat dinamik dalam stdClass, akan terus berfungsi tanpa perubahan, hanya kerja tersirat dengan sifat tidak wujud akan disokong untuk melindungi pembangun daripada pepijat tersembunyi. Untuk mengekalkan kerja kod lama, atribut "#[AllowDynamicProperties]" dicadangkan, membenarkan penggunaan sifat dinamik.
  • Keupayaan untuk menggantikan nilai pembolehubah ke dalam rentetan menggunakan ungkapan "${var}" dan ${(var)}" telah ditamatkan. Sokongan untuk penggantian "{$var}" dan "$var" yang biasa digunakan telah dikekalkan. Contohnya: "Hello {$world}"; OK "Hello $world"; OK "Hello ${world}"; Ditamatkan: Menggunakan ${} dalam rentetan ditamatkan
  • Pemanggil yang disokong separa yang boleh dipanggil melalui "call_user_func($callable)" telah ditamatkan, tetapi tidak menyokong panggilan dalam bentuk "$callable()": "self::method" "parent::method" "static :: kaedah" ["diri", "kaedah"] ["ibu bapa", "kaedah"] ["statik", "kaedah"] ["Foo", "Bar::kaedah"] [Foo baharu, "Bar: : kaedah "]
  • Arahan error_log_mode telah ditambahkan pada tetapan, membolehkan anda menentukan mod akses kepada log ralat.

Sumber: opennet.ru

Tambah komen