Ini adalah pembaruan fitur baru yang paling penting di PHP 8, JIT tidak diaktifkan secara default. Namun JIT tidak membuat banyak perbedaan pada aplikasi web
Contoh tentang kinerja JIT yang ditunjukkan
Sumber Referensi. PHP 8 - Fitur Baru, Peningkatan, dan Potensi Masalah dengan WordPress
2. PHP 8 Fitur baru
===
Terimakasih untuk
Apa yang baru di PHP 8
Sesha ・ 15 Nov '20 ・ 9 mnt baca
#php8 #php #laravel #web
RFC operator nullsafe
Alih-alih menulis klasik. == null Anda dapat menggunakan "?"
Sebelum
$country = null; if ($session !== null) { $user = $session->user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } }
Masuk ke mode layar penuh Keluar dari mode layar penuh
Setelah
$country = $session?->user?->getAddress()?->country; _
Masuk ke mode layar penuh Keluar dari mode layar penuh
Promosi properti konstruktor
Alih-alih menentukan properti kelas dan konstruktor untuknya, PHP sekarang dapat menggabungkannya menjadi satu
// In php 7.x class Point { protected float $x; protected float $y; protected float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0, ) { $this->x = $x; $this->y = $y; $this->z = $z; } } // In PHP 8 class Point { public function __construct( protected float $x = 0.0, protected float $y = 0.0, protected float $z = 0.0, ) {} }
Masuk ke mode layar penuh Keluar dari mode layar penuh
Jenis Serikat 2. 0
PHP adalah struktur yang diketik secara dinamis, Jadi tipe gabungan sangat berguna di banyak tempat. Jenis serikat adalah kumpulan dari dua atau lebih jenis yang menunjukkan bahwa salah satu dari itu dapat digunakan
// In PHP 7.4 class Number { private $number; public function setNumber($number) { $this->number = $number; } } // In PHP 8 class Number { private int|float $number; public function setNumber(int|float $number): void { $this->number = $number; } }
Masuk ke mode layar penuh Keluar dari mode layar penuh
RFC Tipe Campuran
Tautan referensi
Tipe campuran adalah tambahan yang bagus untuk sistem tipe php8. Ini setara dengan salah satu dari jenis ini
array|bool|callable|int|float|null|object|resource|string _
Masuk ke mode layar penuh Keluar dari mode layar penuh
Berikut adalah contoh dari dokumentasi RFC tentang bagaimana ini digunakan
public function foo(mixed $value) {}
Masuk ke mode layar penuh Keluar dari mode layar penuh
Perhatikan juga bahwa karena mixed sudah menyertakan null, tidak diperbolehkan membuatnya nullable. Berikut ini akan memicu kesalahan
// Fatal error: Mixed types cannot be nullable, null is already part of the mixed type. function bar(): ?mixed {} _
Masuk ke mode layar penuh Keluar dari mode layar penuh
Cocokkan Ekspresi RFC
Apakah ekspresi kecocokan menggantikan sakelar?. Pencocokan dapat mengembalikan nilai, tidak memerlukan pernyataan panjang seperti sakelar. Ini menggunakan perbandingan tipe yang ketat
//The switch statement loosely compares (==) the given value to the case values. This can lead to some very surprising results. switch ('100') { case 100: $price = "Oh no!"; break; case '100': $price = "This is what I expected"; break; } echo $price; ///> Oh no! //The match expression uses strict comparison (===) instead. The comparison is strict regardless of strict_types. echo match ('100') { 100 => "Oh no!", '100' => "This is what I expected", };
Masuk ke mode layar penuh Keluar dari mode layar penuh
Bernama Argumen RFC
Argumen bernama memberi Anda lebih banyak fleksibilitas saat memanggil fungsi. Sebelumnya, Anda harus memanggil fungsi dan meneruskan setiap argumen sesuai urutan fungsi yang ditentukan
class ExampleClass { public function __construct( private string $title, private string|null $description, private string $type ) { } } // In PHP 7.x $my_class = new Log ( 'New Support request', '', 'support', ); // In PHP 8 $my_class = new ExampleClass ( title : 'New Support request', description : 'You received a new support ...', type: 'support', ); // even you can write something like these $my_class = new ExampleClass ( title : 'New Support request', type: 'support', ); _
Masuk ke mode layar penuh Keluar dari mode layar penuh
Atribut
Alih-alih anotasi PHPDoc, kini Anda dapat menggunakan metadata terstruktur dengan sintaks asli PHP
// PHP 7 { /** * @Route("/api/posts/{id}", methods={"GET"}) */ public function get($id) { /* .. */ } } // PHP 8 class PostsController { #[Route("/api/posts/{id}", methods: ["GET"])] public function get($id) { /* .. */ } } _
Masuk ke mode layar penuh Keluar dari mode layar penuh
Fungsi dan Kelas Baru PHP
Kelas, Antarmuka, dan Fungsi Baru
- Atribut v2 RFC
- RFC Peta Lemah
- Lempar Ekspresi RFC
- Tanda Koma di Daftar Parameter
$country = $session?->user?->getAddress()?->country; _0
Masuk ke mode layar penuh Keluar dari mode layar penuh
- Warisan dengan metode pribadi RFC
- Array Dimulai Dengan Indeks Negatif
$country = $session?->user?->getAddress()?->country; _1
Masuk ke mode layar penuh Keluar dari mode layar penuh
- Menangkap non-menangkap RFC
$country = $session?->user?->getAddress()?->country; _2
Masuk ke mode layar penuh Keluar dari mode layar penuh
- ...
3. Dampak & kompatibilitas PHP 8 (dengan Wordpress)
===
Tautan Referensi
Kompatibilitas Versi Wordpress
PHP 8 adalah pembaruan utama PHP dan WordPress bertujuan untuk selalu kompatibel dengan versi baru PHP
Hanya sebagian kecil dari plugin yang tersedia, yang lebih populer dan dikembangkan secara profesional, memiliki pengujian otomatis
PHP 7. * versi telah melihat serangkaian penghentian yang jauh lebih besar daripada versi PHP sebelumnya. Dimana PHP5. 6 ke PHP 7 adalah migrasi yang relatif sederhana, dari 7. x hingga 8 bisa sangat menyakitkan, terutama untuk basis kode yang sangat lama, kenyataannya, bagaimanapun, WordPress bukanlah basis kode seperti itu
Laporan pengujian adalah
** Masalah yang dilaporkan sejak awal di WP 5. 6 siklus dev dan diperbaiki sejak berdasarkan pemindaian Kompatibilitas PHP
- Parameter opsional dideklarasikan sebelum parameter yang diperlukan
- Metode pribadi terakhir
- Hapus penggunaan create_function
- Hanya panggil libxmldisableentity_loader secara kondisional
** Ada sejumlah besar peringatan PHP yang telah diubah menjadi pengecualian kesalahan di PHP 8
** Perubahan tingkat kesalahan tidak terkait dengan RFC
Peringatan berikut telah diubah menjadi kesalahan yang mungkin terkait dengan penghentian di PHP 7. versi x
- Mencoba menulis ke properti non-objek. Sebelumnya ini secara implisit membuat objek stdClass untuk string null, false, dan kosong
- Mencoba menambahkan elemen ke array yang sudah menggunakan kunci PHP_INT_MAX
- Mencoba menggunakan tipe yang tidak valid (larik atau objek) sebagai kunci larik atau offset string
- Mencoba untuk menulis ke indeks array dari nilai skalar
- Mencoba membongkar non-array/Traversable
** Peringatan datang dari mana saja
PHP 8 akan mengandung banyak perubahan yang merusak dan sangat berfokus pada pengetikan yang ketat, sistem ekstensibilitas tipe WordPress yang tidak aman juga menjadi sangat rentan terhadap kesalahan, berpotensi menyebabkan plugin menyebabkan kesalahan ketik di plugin lain atau WordPress itu sendiri, banyak peringatan yang akan
4. Tidak digunakan lagi
Selama PHP7. x siklus rilis, setiap versi memperkenalkan penghentian baru, yang sekarang telah diselesaikan sebagai penghapusan fitur di PHP 8. Ini juga berlaku untuk beberapa penghentian yang sudah diterapkan di PHP 5. x, tetapi tidak dihapus di PHP 7. 0 rilis