Keluaran bahasa pengaturcaraan PHP 8.1

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

Penambahbaikan utama dalam PHP 8.1:

  • Menambah sokongan untuk penghitungan, sebagai contoh, anda kini boleh menggunakan binaan berikut: enum Status { case Pending; kes Aktif; kes Arkib; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Menambah sokongan untuk benang ringan yang dipanggil gentian, yang membolehkan pengurusan benang peringkat rendah. Sokongan gentian dirancang untuk rangka kerja Amphp dan ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('selepas menyambung semula');
  • Pelaksanaan cache kod objek (opcache) telah dipertingkatkan, membolehkan penyimpanan maklumat pewarisan kelas dalam cache. Pengoptimuman ini telah meningkatkan prestasi sesetengah aplikasi sebanyak 5-8%. Pengoptimuman lain termasuk pengoptimuman JIT, sokongan JIT untuk seni bina ARM64 (AArch64), pecutan resolusi nama, pengoptimuman pustaka timelib dan ext/date, peningkatan prestasi bersiri dan penyahsiri, dan pengoptimuman fungsi get_declared_classes(), explode(), strtr(), strnatcmp(), dan dechex(). Secara keseluruhan, prestasi Symfony Demo telah meningkat sebanyak 23.0%, dan WordPress % 3.5.
  • Operator pembongkaran di dalam tatasusunan "...$var", yang membenarkan penggantian tatasusunan sedia ada semasa mentakrif tatasusunan baharu, telah diperluaskan untuk menyokong kunci rentetan (sebelum ini hanya pengecam digital yang disokong). Sebagai contoh, anda kini boleh menggunakan dalam kod: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Kata kunci "baru" dibenarkan dalam pemula, seperti dalam definisi fungsi sebagai parameter lalai atau dalam atribut argumen. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Ia kini boleh menandakan sifat kelas untuk akses baca sahaja (maklumat dalam sifat sedemikian boleh ditulis sekali sahaja, selepas itu ia tidak akan tersedia untuk pengubahsuaian). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Tajuk', /* … */); $post->title = 'Lain-lain'; > Ralat: Tidak boleh mengubah suai harta baca sahaja Post::$title
  • Sintaks baharu untuk objek boleh panggil telah dilaksanakan - penutupan kini boleh dibentuk dengan memanggil fungsi dan menghantar nilai "..." sebagai hujah (iaitu myFunc(...) dan bukannya Closure::fromCallable('myFunc')): function foo(int $a, int $b) { /* ... */ } $foo = foo(...); $foo(a: 1, b: 2);
  • Sokongan penuh untuk jenis persimpangan telah ditambahkan, membolehkan anda mencipta jenis baharu dengan menggabungkan jenis sedia ada. Tidak seperti jenis kesatuan, yang mentakrifkan koleksi dua atau lebih jenis, jenis persimpangan memerlukan semua jenis yang ditentukan untuk hadir dalam set yang sedang diisi, bukan hanya mana-mana jenis yang disenaraikan. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Terdapat jenis baharu "tidak pernah" yang boleh digunakan untuk memaklumkan penganalisis statik bahawa fungsi akan menamatkan pelaksanaan program, contohnya dengan membuang pengecualian atau melaksanakan fungsi keluar. fungsi dd(campuran $input): jangan sekali-kali { keluar; }
  • Satu array_is_list fungsi baharu telah dicadangkan, yang membolehkan anda menentukan bahawa kekunci dalam tatasusunan disusun mengikut urutan peningkatan nilai berangka, bermula dari 0: $list = [“a”, “b”, “c”]; array_is_list($list); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // salah
  • Anda kini boleh menggunakan kata kunci terakhir untuk mengelakkan pemalar mengatasi kelas induk. kelas Foo { final public const X = "foo"; } class Bar memanjangkan Foo { public const X = "bar"; > Ralat maut: Bar::X tidak boleh mengatasi pemalar akhir Foo::X }
  • Fungsi fsync dan fdatasync dicadangkan untuk memaksa perubahan disimpan daripada cache cakera. $file = fopen("sample.txt", "w"); fwrite($file, "Sesetengah kandungan"); if (fsync($file)) { echo "Fail telah berjaya dikekalkan ke cakera."; } fclose($file);
  • Menambah keupayaan untuk menggunakan awalan "0o" dan "0O" untuk nombor perlapanan, sebagai tambahan kepada awalan "0" yang digunakan sebelum ini. 016 === 0o16; // benar 016 === 0O16; // benar
  • Adalah dicadangkan untuk mengehadkan penggunaan $GLOBALS secara terpilih, yang akan membawa kepada pelanggaran keserasian ke belakang, tetapi akan memungkinkan untuk mempercepatkan operasi dengan tatasusunan dengan ketara. Sebagai contoh, kemungkinan untuk melumpuhkan penulisan kepada $GLOBALS dan menghantar $GLOBALS melalui penunjuk sedang dipertimbangkan. Analisis terhadap 2000 pakej menunjukkan bahawa hanya 23 daripadanya akan terjejas oleh perubahan ini. Sebagai contoh, jika cadangan itu diluluskan, 8.1 tidak lagi akan menyokong ungkapan seperti: $GLOBALS = []; $GLOBALS += []; $GLOBAL =& $x; $x =& $GLOBAL; unset($GLOBALS); by_ref($GLOBALS);
  • Kaedah dalaman kini mesti mengembalikan jenis yang betul. Dalam PHP 8.1, mengembalikan jenis yang tidak sepadan dengan pengisytiharan fungsi akan menghasilkan amaran, tetapi dalam PHP 9.0, amaran ini akan digantikan dengan ralat.
  • Kerja diteruskan untuk memindahkan fungsi daripada menggunakan sumber kepada memanipulasi objek. Fungsi finfo_* dan imap_* telah dipindahkan ke objek.
  • Menghantar nilai nol sebagai argumen kepada fungsi dalaman yang ditandakan tidak boleh dibatalkan telah ditamatkan. Dalam PHP 8.1, menggunakan binaan seperti str_contains("string", null) akan membawa kepada amaran, dan dalam PHP 9 kepada ralat.
  • Menambah sokongan untuk algoritma pencincangan MurmurHash3 dan xxHash.

Sumber: opennet.ru

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster